- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)