列主元高斯消去法和列主元三角分解法解线性方程_第1页
列主元高斯消去法和列主元三角分解法解线性方程_第2页
列主元高斯消去法和列主元三角分解法解线性方程_第3页
列主元高斯消去法和列主元三角分解法解线性方程_第4页
列主元高斯消去法和列主元三角分解法解线性方程_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、计算方法实验报告1【课题名称】用列主元高斯消去法和列主元三角分解法解线性方程【目的和意义】高斯消去法是一个古老的求解线性方程组的方法,但由它改进得到的选主元的高斯消去法则是目前计算机上常用的解低阶稠密矩阵方程组的有效方法。用高斯消去法解线性方程组的基本思想时用矩阵行的初等变换将系数矩阵A约化为具有简单形式的矩阵(上三角矩阵、单位矩阵等),而三角形方程组则可以直接回带求解用高斯消去法解线性方程组 Ax b (其中A Rn xn)的计算量为:乘除法运算步骤为MD n (n 1) (n 1) n (2 n 1) n (n 1) n(n 1) n 3* 22 6 2 2n3,加减运算步骤为AS (n

2、1) n (2 n 1 ) n( n 1 ) n (n 1)(n 1) n (2 n 2 25)_6。相比之下,传统的克莱姆U “ c19法则则较为繁琐,如求解 20阶线性方程组,克莱姆法则大约要5 10次乘法,而用高斯消去法只需要3060次乘除法。在高斯消去法运算的过程中,如果出现abs(A(i,i)等于零或过小的情况,则会导致矩阵元素数量级严重增长和舍入误差的扩散,使得最后的计算结果不可靠,所以目前计算机上常用的解低阶稠密矩阵方程的快速有效的方法时列主元高斯消去法,从而使计算结果更加精确。2、列主元三角分解法高斯消去法的消去过程,实质上是将A分解为两个三角矩阵的乘积A=LU,并求解Ly=b

3、的过程。回带过程就是求解上三角方程组Ux=y。所以在实际的运算中,矩阵L和U可以直接计算出,而不需要任何中间步骤, 从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提咼了运算速度,这就是三角分解法采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度【计算公式】1、列主元高斯消去法设有线性方程组Ax=b,其中设A为非奇异矩阵。方程组的增广矩阵为aii3,2a1na,ba21Ma22a2nbl b2 M第1步(k=1):首先在然后交换(A,b )的第3|1Man1an2annbnA的第一列中选取绝对值最大的元素3|1,作为第一步的主元素:311max3&#

4、39;ii1行与第I行元素,再进行消元计算。设列主元素消去法已经完成第1步到第k-1步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组A(k)x=b(k)A,b A(k),b(k)L瞪31(n)Mb32?L3;?322)Mb22)OMMM3kk)L3kn)Mbkk)(k)3k 1,k(k)3k 1,nMbkk)MMMM31(1)第k步计算如下:对于k=1 , 2,n-1(k)(k)atkmaxaik(1 )按列选主元:即确定 t(2)如果t Mk,则交换A ,b第t行与第k行元素。消元计算aikmikaik,(iakk1,L , n)abimk akj,mkbk,(i,j k 1L

5、,n)(ik 1L ,n)£ l,(z = A -h 1,消元乘数mik满足:(4 )回代求解XnbnannXi(bij iaijXj)1,(i n 1, n 2,1)aii步分解,为了避免用绝对值很小的数Ukk作除数,Ukjakjlik(aikk 1lkmumjm 1k 1limumk) / ukkm 1(j(iaik1limUmk(ik,km 11,Lk, k 1,L , n; k 1,2丄,n)k 1,k2,L ,n;k 1,2丄,n),n),于是有Ukk= Sk。如果Stmaxs,则将矩阵的第t行与第k行元素互换,将(i. a -i,j)位置的新元素仍记为 jj或jj,然后再

6、做第k步分解,这2、列主元三角分解法AA,b对方程组的增广矩阵经过k-1步分解后,可变成如下形式:u11U12LU1,k 1u1kLu1jL%y1I21U22LU2,k 1U2kLU2jLU2ny2MMMMMMMlk 1,1lk 1,2LUk 1,k 1Uk 1,kLUk 1,jLUk 1,nyk1Alk1lk2Llk,k 1akkLakjLaknbkMMMMMMMli1li2Lli ,k 1aikLajLanbMMMMMMMln1ln2Lln,k 1ankLanjLannbnukksklikSi /Sk且lik1 (i(Sk即交换前的St), (i k 1,k 2,L ,n)k 1,k2,L

7、 , n),【列主元高斯消去法程序流程图】输入方程:系数矩陪A,t以辰主元允许S小值c程組是舌肖k-1,2n-1按别选刖主云亘T标p, q=in 3Dt 3 s(;A(tt:切J并将tTAClcnh:)巾的行号4換苗在丸中的行、即(=q+k-li=k+-lJ . . -nm0kj=AG*j/A<k/E3A«k :环-凸(yk -in G10 * 4畑 k: *回代求紹i=n- J. 1%Tij=hCrH咼 Qxn)城:=0(手-BLHtiJ;攻:ii+l :可*%i+l 榊沖 ©p J 諭出i+算帮陪机IKCJajQZJ (p) VCVES4输岀“方程处有误"

8、;停机VE3判断列午讦旱否存当前行k辅岀“主元太小“,弘L < A> =0t?Knpltmp2=bCSr;工bCq,)=temps.【列主元高斯消去法Matlab主程序】function x=gauss1(A,b,c)%列主元法高斯消去法解线性方程Ax=bif (le ngth(A)=le ngth(b)%判断输入的方程组是否有误enddisp('输入方程有误!return;disp('原方程为 AX=b :')dis PCn=len gth(A);for k=1: n-1')p ,q=max(abs(A (k:n, k);q=q+k-1;if ab

9、s (p)<cdisp('列元素太小,det(A) y);break;elseif q>ktem P仁A(k,:);%显示方程组%找列主元%找出第k列中的最大值,其下标为p,q%q在A(k:n,k)中的行号转换为在A中的行%列主元所在行不是当前行,将当前行与列A(k,:)=A(q,:);元所在行交换(包括b)endA(q,:)=tem p1;tem p2=b(k,:);b(k,:)=b(q,:);b(q,:)=te mp2;%消元for i=k+1: nm(i,k)=A(i,k)/A(k,k);%A(k,k) 将 A(i,k)消为0所乘系数%第i行消元处理%b消元处理A(i

10、,k: n)=A(i,k: n)-m(i,k)*A(k,k: n);b(i)=b(i)-m(i,k)*b(k);endenddisp('消元后所得到的上三角阵是')%显示消元后的系数矩阵%回代求解b(n )=b( n)/A(n,n);for i=n-1:-1:1b(i)=(b(i)-sum(A(i,i+1: n)*b(i+1: n)/A(i,i);end clear x;disp('AX=b的解 x 是')x=b;【调用函数解题】>>>>>>>>Command WindowA= 3 4;1 -1 1.212: b=

11、i ;2;3;c=0,0000 L .?r= £au331 (Aj b, c)原方程为AS二b:-11消元后師得到的上三角眩是-0.3333Q, 5000【列主元三角分解法程序流程图】【列主元三角分解法Matlab主程序】自己编的程序:%定义函数列主元三角分解法函fun ction x=P LU(A,b,e ps)%判断输入的方程组是否有误if (le ngth(A)=le ngth(b)dispC输入方程有误!')return;enddisp('原方程为 AX=b :')%显示方程组dis PCn=le ngth(A);A=A b;%将A与b合并,得到增广矩

12、阵for r=1: nif r=1for i=1:nc d=max(abs(A(:,1);%选取最大列向量,并做行交换if c<=e ps%最大值小于e,主元太小,程序结束break;elseendd=d+1-1;p=A(1,:);A(1,:)=A(d,:);A(d,:)=p;A(1,i)=A(1,i);endA(1,2: n)=A(1,2: n);% 求 u(1,i)A(2: n,1)=A(2: n,1)/A(1,1);else%按照方程求取u(r,i)u(r,r)=A(r,r)-A(r,1:r-1)*A(1:r-1,r);if abs(u(r,r)v=e ps%如果u (r,r)小于

13、e,则交换行P=A(r,:);A(r,:)=A(r+1,:);A(r+1,:)=p;elseendfor i=r: nA(r,i)=A(r,i)-A(r,1:r-1)*A(1:r-1,i);%根据公式求解,并把结果存在矩阵Aendfor i=r+1: nA(i,r)=(A(i,r)-A(i,1:r-1)*A(1:r-1,r)/A(r,r);%根据公式求解,并把结果存在矩阵endendendy(1)=A(1, n+1);for i=2:nh=0;for k=1:i-1h=h+A(i,k)*y(k);endendy(i)=A(i, n+1)-h;%根据公式求解y(i)x(n )=y( n)/A(n

14、,n);for i=n-1:-1:1h=0;for k=i+1: nh=h+A(i,k)*x(k);endx(i)=(y(i)-h)/A(i,i);%根据公式求解x(i)end disp('AX=b 的解 x 是')x=x'%输出方程的解可直接得到P,L,U并解出方程解的的程序(查阅资料得子函数 PLU1,其作用是将矩阵A分解成L乘以U的形式。PLU2为调用PLU1解题的程序,是自己编的)(I ).fun ctio n l,u, p=PLU1(A)%定义子函数,其功能为列主元三角分解系数矩m, n=size(A);%判断系数矩阵是否为方if m=nerror('

15、矩阵不是方阵')return%判断系数矩阵endif det(A)=0能否被三角分解error('矩阵不能被三角分解')endPL,Uu=A;p=eye(m);匸eye(m);%将系数矩阵三角分解,分别求出for i=1:mfor j=i:mt(j)=u(j,i);for k=1:i-1endendt(j)=t(j)-u(j,k)*u(k,i);a=i;b=abs(t(i);for j=i+1:mif b<abs(t(j)b=abs(t(j);a=j;endendif a=ifor j=1:mc=u(i,j);u(i,j)=u(a,j);u(a,j)=c;endf

16、or j=1:mP(i,j)=P(a,j);P (a,j)=c;endc=t(a);t(a)=t(i);t(i)=c;endu(i,i)=t(i);for j=i+1:mu(j,i)=t(j)/t(i);endfor j=i+1:mfor k=1:i-1u(i,j)=u(i,j)-u(i,k)*u(k,j);endendend l=tnl(u,-1)+eye(m);u=triu(u,0)%定义列主元三角分解法的fun ction x=P LU2(A,b)函数%调用PLU分解系数矩l,u, p=PLU1(A)m=le ngth(A);%由于A左乘p,故b也要左v=b;for q=1:mb(q)=

17、sum( p(q,1:m)*v(1:m,1);end%求解方程b(1)=b(1)Ly=b for i=2:1:mb(i)=(b(i)-sum(l(i,1:i-1)*b(1:i-1);end%求解方程b(m)=b(m)/u(m,m);Ux=y for i=m-1:-1:1b(i)=(b(i)-sum(u(i,i+1:m)*b(i+1:m)/u(i,i);end clear x;disp('AX=b 的解 x 是')x=b;【调用函数解题】Command Window» a= 03-1» b=l:2:31» FLU(ab, th 0001)I.leeT-0.3333Q. EOOOCommand Window1 ;2 1>>£=<! 3 4; 1 -» b=El:2;3:>> s=PLU2CA, b)1,00001-00000 5001

温馨提示

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

评论

0/150

提交评论