LU分解法、列主元高斯法、Jacobi迭代法、Gauss-Seidel法的原理及Matlab程序_第1页
LU分解法、列主元高斯法、Jacobi迭代法、Gauss-Seidel法的原理及Matlab程序_第2页
LU分解法、列主元高斯法、Jacobi迭代法、Gauss-Seidel法的原理及Matlab程序_第3页
LU分解法、列主元高斯法、Jacobi迭代法、Gauss-Seidel法的原理及Matlab程序_第4页
LU分解法、列主元高斯法、Jacobi迭代法、Gauss-Seidel法的原理及Matlab程序_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、实验目的及题目实验目的:学会用高斯列主元消去法,LU分解法,JacobiGauss-Seidel方程组。Matlab编写各种方法求解线性方程组的程序。实验题目:用列主元消去法解方程组:xx3x41 2 42xxxx11 2 3 42xxx3x321 2 3 4x1

2x2

3xx43 4LUAxb其中48 24 0 12 424 24 12 A

4,b 0 6 20 2

26 6 2

2 JacobiGauss-Seidel迭代法求解方程组:10xx2x

111 2 3xx3x1122 3 4xx1

10x63x1

3x2

x11x3

25二、实验原理、程序框图、程序代码等实验原理高斯列主元消去法的原理bxgbxgbxg1nn 12nn 2bxbx11

122bx222

bxgnnn n这个过程就是消元,然后再回代就好了。具体过程如下:对于k1,2,

n1,若a(k)0,依次计算kk南昌航空大学数学与信息科学学院实验报告南昌航空大学数学与信息科学学院实验报告第PAGE10第10页ma(k)/a(k)ik ik kka(k1)a(k)m

a(k),nij ij ik,nb(k1)b(k)m

b(k),i,jk1,然后将其回代得到:

i ixb(n)/a(n)

ikk,1n n nn,1nx(b(k) a(k)x)/a(k),kn1,n2,n以上是高斯消去。

k k kj j kkjk1但是高斯消去法在消元的过程中有可能会出现a(k)0的情况,这时消元就无法进行了,kk即使主元数a(k)0,但是很小时,其做除数,也会导致其他元素数量级的严重增长和舍入误差kk的扩散。因此,为了减少误差,每次消元选取系数矩阵的某列中绝对值最大的元素作为主元素。然后换行使之变到主元位置上,再进行销元计算。即高斯列主元消去法。直接三角分解法(LU)的原理AALU直接利用矩阵乘法,得到矩阵的三角分解计算公式为:,n2, ,nu,n2, ,nla/u

,ii1

11,nk,nukj

akj

m1

lukmmj

,,jk,k1,

n,k2,3,nl(ak1lu )/u,ik1,kik ik immk kkm1

,n且kn由上面的式子得到矩阵A的LU分解后,求解Ux=y的计算公式为yb1 1nybi1ln

y,i2,3,iiiixy

ijjj1/un n nn,1iix(ynux)/,1ii

,in1,n2,LU。

ijj iiji1JacobiGauss-SeidelJcaobiAxb (1)11A11

,a,...,a22

均不为零,令A

Ddiaga,a11 22

,...,a nn从而(1)可写成

AADDDxDAxb

(2)令xBxf1 1其中BID1,fDb. (3)1 11以B为迭代矩阵的迭代法(公式)1xk1Bxkf1 1称为雅可比(Jacobi)迭代法,其分量形式为

(4)1 n x(k1) i aii

bai ij1ji

x(k)j i

k(5) 1 2 其中x0x0,x0,...x 1 2 Gauss-Seidel由雅可比迭代公式可知,在迭代的每一步计算过程中是用xk的全部分量来计算xk1的ix1x1,...,x

k1没有被利i用。把矩阵A分解成

1 i1ADLU (6)Ddiag11,a22,...,annLUA的主对角元除外的下三角和上三角部分,于是,方程组(1)便可以写成DLxUxb即xB2其中

xf2BDL1U,22以B为迭代矩阵构成的迭代法(公式)2

fDL1b2 (7)xk1Bxkf2 2

(8)称为高斯—塞德尔迭代法,用分量表示的形式为1 i1 n x(k1) i a

bai

x(k1)aj

x(kjii

jji1 in, k程序代码高斯列主元的代码functionGauss(A,b) %A为系数矩阵,b为右端项矩阵[m,n]=size(A);n=length(b);fork=1:n-1[pt,p]=max(abs(A(k:n,k))); %找出列中绝对值最大的数p=p+k-1;ifp>kt=A(k,:);A(k,:)=A(p,:);A(p,:)=t; %t=b(k);b(k)=b(p);b(p)=t;endm=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);ifflag~=0endend

Ab=[A,b];x=zeros(n,1); %x(n)=b(n)/A(n,n);fork=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);endforfprintf('x[%d]=%f\n',k,x(k));endLU分解法的程序functionLU(A,b) %A为系数矩阵,b为右端项矩[m,n]=size(A); %初始化矩阵A,b,L和Un=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);fork=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);endL %L矩阵U %U矩阵y=zeros(n,1); %y(1)=b(1);fork=2:ny(k)=b(k)-L(k,1:k-1)*y(1:k-1);endx=zeros(n,1);x(n)=y(n)/U(n,n);fork=n-1:-1:1x(k)=(y(k)-U(k,k+1:n)*x(k+1:n))/U(k,k);endfork=1:nfprintf('x[%d]=%f\n',k,x(k));endJacobifunctionJacobi(A,b,eps) %A为系数矩阵,b为后端项矩阵,epe为精度[m,n]=size(A);D=diag(diag(A)); %求矩阵L=D-tril(A); %求矩阵LU=D-triu(A); %temp=1;x=zeros(m,1);k=0;whileabs(max(x)-temp)>epstemp=max(abs(x));k=k+1; %记录循环次数x=inv(D)*(L+U)*x+inv(D)*b; %雅克比迭代公endfork=1:nfprintf('x[%d]=%f\n',k,x(k));endGauss-SeidelfunctionGauss_Seidel(A,b,eps) %A为系数矩阵,b为后端项矩阵,epe为精度[m,n]=size(A);D=diag(diag(A)); %求矩阵L=D-tril(A); %求矩阵LU=D-triu(A); %temp=1;x=zeros(m,1);k=0;whileabs(max(x)-temp)>epstemp=max(abs(x));k=k+1; %记录循环次数x=inv(D-L)*U*x+inv(D-L)*b; %Gauss_Seidel的迭代公式endfork=1:nfprintf('x[%d]=%f\n',k,x(k));end三、实验过程中需要记录的实验数据表格第一题(高斯列主元消去)的数据>>A=[1103;21-11;3-1-13;-123-1];>>b=[4;1;-3;4];>>Gauss(A,b)x[1]=-1.333333x[2]=2.333333x[3]=-0.333333x[4]=1.000000第二题(LU分解法)数据>>A=[48-240-12;-24241212;06202;-66216];>>b=[4;4;-2;-2];>>LU(A,b)L=1.0000000-0.50001.00000000.50001.00000-0.12500.2500-0.07141.0000U=48.0000-24.00000-12.0000012.000012.00006.00000014.0000-1.000000012.9286x[1]=0.521179x[2]=1.005525x[3]=-0.375691x[4]=-0.259669Jacobi>>A=[10-120;08-13;2-1100;-13-111];b=[-11;-11;6;25];Jacobi(A,b,0.00005)x[1]=-1.467396x[2]=-2.358678x[3]=0.657604x[4]=2.842397Gauss_Seidel迭代的数据>>A=[10-120;08-13;2-1100;-13-111];>>b=[-11;-11;6;25];>>Gauss_Seidel(A,b,0.00005)x[1]=-1.467357x[2]=-2.358740x[3]=0.657597x[4]=2.842405四、实验中存在的问题及解决方案存在的问题第一题中在matlab中输入>>数据省略得到m=4 n=4 Undefinedfunctionorvariable"Ab".Errorin==>Gaussat8[ap,p]=max(abs(Ab(k:n,k)));没有得到想要的果。(2)第二题中在 matlab中输入>>y=LU(A,b)得到y=4.0000 6.0000 -5.0000-3.3571不是方程组的解。(3)第三题中在用高斯赛德尔方法时在matlab中输入>>Gauss-Seidel(A,b,eps)结果程序错Errorusing==>Gauss Toomanyoutput得不到想要的结果。解决方案mn8行中将Ab改为A问题就解决了。由于程序后面出现了矩阵yy的值,但是我们要的事xyxy去掉就解决了问题。function文件中命名不能出现“”应该将其改为下划线“_M“Gauss-Seidel(A,b,eps)”改成“Gauss_Seidel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论