网站大量收购独家精品文档,联系QQ:2885784924

LU分解法列主元高斯法Jacobi迭代法Gauss-Seidel法的原理及Matlab程序.doc

LU分解法列主元高斯法Jacobi迭代法Gauss-Seidel法的原理及Matlab程序.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、实验目的及题目 1.1 实验目的: (1)学会用高斯列主元消去法,LU分解法,Jacobi迭代法和Gauss-Seidel迭代法解线性方程组。 (2)学会用Matlab编写各种方法求解线性方程组的程序。 1.2 实验题目: 用列主元消去法解方程组:用LU分解法解方程组其中, 分别用Jacobi迭代法和Gauss-Seidel迭代法求解方程组:二、实验原理、程序框图、程序代码等 2.1实验原理 2.1.1高斯列主元消去法的原理 Gauss消去法的基本思想是一次用前面的方程消去后面的未知数,从而将方程组化为等价形式: 这个过程就是消元,然后再回代就好了。具体过程如下: 对于,若依次计算 然后将其回代得到: 以上是高斯消去。 但是高斯消去法在消元的过程中有可能会出现的情况,这时消元就无法进行了,即使主元数但是很小时,其做除数,也会导致其他元素数量级的严重增长和舍入误差的扩散。因此,为了减少误差,每次消元选取系数矩阵的某列中绝对值最大的元素作为主元素。然后换行使之变到主元位置上,再进行销元计算。即高斯列主元消去法。 2.1.2直接三角分解法(LU分解)的原理先将矩阵A直接分解为则求解方程组的问题就等价于求解两个三角形方程组。 直接利用矩阵乘法,得到矩阵的三角分解计算公式为: 由上面的式子得到矩阵A的LU分解后,求解Ux=y的计算公式为 以上为LU分解法。2.1.3Jacobi迭代法和Gauss-Seidel迭代法的原理 (1)Jcaobi迭代 设线性方程组(1) 的系数矩阵A可逆且主对角元素均不为零,令并将A分解成(2) 从而(1)可写成令其中.(3) 以为迭代矩阵的迭代法(公式)(4) 称为雅可比(Jacobi)迭代法,其分量形式为(5) 其中为初始向量. (2)Gauss-Seidel迭代 由雅可比迭代公式可知,在迭代的每一步计算过程中是用的全部分量来计算的所有分量,显然在计算第i个分量时,已经计算出的最新分量没有被利用。 把矩阵A分解成(6)其中,分别为的主对角元除外的下三角和上三角部分,于是,方程组(1)便可以写成即 其中(7) 以为迭代矩阵构成的迭代法(公式)(8) 称为高斯—塞德尔迭代法,用分量表示的形式为 2.2程序代码 2.2.1高斯列主元的代码 function Gauss(A,b) %A为系数矩阵,b为右端项矩阵 [m,n]=size(A); n=length(b); for k=1:n-1[pt,p]=max(abs(A(k:n,k))); %找出列中绝对值最大的数p=p+k-1;if pkt=A(k,:);A(k,:)=A(p,:);A(p,:)=t; %交换行使之变到主元位置上t=b(k);b(k)=b(p);b(p)=t;end m=A(k+1:n,k)/A(k,k);%开始消元 A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n); b(k+1:n)=b(k+1:n)-m*b(k); A(k+1:n,k)=zeros(n-k,1); if flag~=0Ab=[A,b]; end endx=zeros(n,1);%开始回代x(n)=b(n)/A(n,n);for k=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);end for k=1:nfprintf(x[%d]=%f\n,k,x(k)); end 2.2.2 LU分解法的程序 function LU(A,b) %A为系数矩阵,b为右端项矩阵 [m,n]=size(A);%初始化矩阵A,b,L和U n=length(b);L=eye(n,n); U=zeros(n,n); U(1,1:n)=A(1,1:n);%开始进行LU分解 L(2:n,1)=A(2:n,1)/U(1,1); for k=2:nU(k,k:n)=A(k,k:n)-L(k,1:k-1)*U(1:k-1,k:n);L(k+1:n,k)=(A(k+1:n,k)-L(k+1:n,1:k-1)*U(1:k-1,k))/U(k,k); end L%输出L矩阵 U%输出U矩阵 y=zeros(n,1);%开始解方程组Ux=y y(1)=b(1); for k=2:ny(k)=b(k)-L(k,1:k-1)*y(1:k-1); end x=zeros(n,1); x(n)=y(n)/U(n,n); for k=n-1:-1:1x(k)=(y(k)-U(k,k+1:n)*x(k+1:n))/U(k,k); end for k=1:nfprintf(x[%d]=%f\n,k,x(k)); end 2.2.3 Jacobi迭代法的程序 functio

文档评论(0)

peain + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档