数值分析线性方程组的实验报告包含代码_第1页
数值分析线性方程组的实验报告包含代码_第2页
数值分析线性方程组的实验报告包含代码_第3页
数值分析线性方程组的实验报告包含代码_第4页
数值分析线性方程组的实验报告包含代码_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上线性代数方程组的直接解法实验目的:线性方程组求解的直接法编程实现,实验内容:线性方程组求解的高斯消去法算法实现 线性方程组求解的主元素消去法算法实现 线性方程组求解的LU分解得方法算法实现 线性方程组求解追赶法算法实现实验比较:高斯消去、主元素消去、LU分解都用实例 这个进行比较。知识理论解线性方程组的方法大致分为直接法和迭代法。直接法是指假设计算过程中不产生舍入误差,经过有限次的运算可求的方程组精确解的方法。方程(2-1) 记为:AX=b;一、高斯(Gauss)消元法(1).Gauss消元法是最基本的一种方法。先逐次消去变量,将方程组化成同解的上三角方程组。消元过程

2、:先逐次消去变量,将方程组化成同解的上三角方程组基本思想回代过程:按方程的相反顺序求解三角形方程组,得到原方程组的解。(2) Gauss消去法的求解思路为:若先让第一个方程组保持不变,利用它消去其余方程组中的,使之变成一个关于变元的n-1阶方程组。按照(1)中的思路继续运算得到更为低阶的方程组。经过n-1步的消元后,得到一个三角方程。利用求解公式回代得到线性方程组的解。消元过程:第一次消元, (i=1,2,3,n).将(2-1)中第i个方程减去第一个方程乘以(i=1,2,3,n),完成第一次消元, (2-2)其中:;:简记为:其中:按上述方法完成n-1次消元后得到。同解的三角方程组: 简记为:

3、 回代过程:按逆序逐步回代得到方程的解。 (3)算法:(5)Matlab程序代码:function RA,RB,n,X=gaus(A,b)B=A,b;n = length(b);RA = rank(A);RB= rank(B);zhicha = RB-RA;if(zhicha=0) disp('因为RARB,所以此方程组无解'); return;endif RA=RB if RA = n disp('因为RA=RB=n,所以此方程有唯一解'); X=zeros(n,1); for p = 1:n-1 for k = p+1:n m = B(k,p)/B(p,p)

4、; B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1); end end b = B(1:n,n+1); A = B(1:n,1:n); X(n) =b(n)/A(n,n); for q = n-1:-1:1 X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)/A(q,q); end else disp('因为RA=RB<n,所以此方程有无穷解'); endend运行检测:>>A=1 1 1;12 -3 3;-18 3 -1;b=6;15;-15;RA,RB,n,X=gaus(A,b)因为RA=RB=n,所以此方程有唯一解&

5、gt;>RA = 3RB = 3n = 3X = 1.0000 2.00003.0000二、 主元素法1.列主元素法消元(1)基本思想:在每次消元前,在要消去未知数的系数中找到绝对值最大的系数作为主元,通过对换行将其换到对角线上,然后进行消元.(2)消元过程: 与Gauss很类似,每次对对角线换成最大的值,后面过程与Gauss基本相同。如此经过n-1步,(2-1)的增广矩阵A,b被化为上三角矩阵;回代过程:同Gauss算法一样回代求解。(3)算法:det<-1对于k=1,2,3,n-1;|aik,k|=max|aik|(kin)(i)如果aik=0,则停止计算(det(A)=0)

6、(ii)如果aik=k,则zhuan(i)换行 akj<-> aik,j(j=k,k+1,n) bk<-> bik后边就是Gauss消元(4).Matlab程序function X=liezhu(A,b)B=A,b;n=length(b);RA=rank(A);RB=rank(B);if RA=RB if RA=n disp('因为系数矩阵与增广矩阵的秩相同且为n,此方程有唯一解') X=zeros(n,1); for p=1:n-1 y,j=max(abs(B(p:n,p); C=B(p,:); B(p,:)= B(j+p-1,:); B(j+p-1,

7、:)=C; end for p=1:n-1 for k=p+1:n m=B(k,p)/B(p,p); B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1); end end b=B(1:n,n+1); A=B(1:n,1:n); X(n)=b(n)/A(n,n); for q=n-1:-1:1 X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)/A(q,q); end else disp('因为系数矩阵与增广矩阵的秩相同且小于n,方程组有无穷解') endelse disp('因为系数矩阵与增广矩阵的秩不相同,所以此方程组无解'

8、)endend测试结果: >>clear allclcA=1 1 1;12 -3 3;-18 3 -1;b=6 15 -15'liezhu(A,b)>>因为系数矩阵与增广矩阵的秩相同且为n,此方程有唯一解ans = 1.0000 2.0000 3.0000例2测试结果>> clear allclcA=0.50 1.1 3.1;2.0 4.5 0.36;5.0 0.96 6.5;b=6.0 0.020 0.96'liezhu(A,b)>>ans = -2.6000 1.00002.0000三、直接三角分解法1.高斯消元的矩阵表示 第

9、一次消元 经过K次消元后得到: 消元过程:则 (1)LU分解:,因为A的各元素已知,可求出L和U的各元素。(2) 看A的第k行,有,再看A的第k列,有。这样就可以计算计算出U的第k行和L的第k列的元素。(3) 从k=1到k=n交替计算U和L,就能逐步计算出U和L的全部元素。(4) 分两步求解LUx=b,先解方程组Ly=b,因为L是下三角矩阵,求解只要逐步向前回代。第二步是解方程组Ux=y,因为U是上三角矩阵,用逐次向后回代的方法求出x。3.Matlab程序function L,U,Y,X = Doolittle(A,b)n = length(b);L = zeros(n,n);U = zero

10、s(n,n);%先将A进行LU分解for i = 1:n %把第一列第一行求出 for j = i:n if i = 1 A(i,j) = A(i,j); if j>i A(j,i) = A(j,i)/A(i,i); end end end %下面计算U的第i行值 for j = i:n if i= 1 m = 0; for k = 1:i-1 m = m+A(i,k)*A(k,j); end A(i,j) = A(i,j)-m; end end %下面计算L的第i列值 for j = i:n if i = 1&&j>i l = 0; for k = 1:i-1 l

11、 = l+A(j,k)*A(k,i); end A(j,i) = (A(j,i)-l)/A(i,i); end endend%将LU的值分别加入for i = 1:n for j = i:n U(i,j) = A(i,j); end for j = 1:i if i = j L(i,j) = 1; else L(i,j) = A(i,j); end endend% LY=B,UX=Y,进行求解Ab = L,bY = zeros(n,1);Y(1) = Ab(1,n+1)/Ab(1,1);for i = 2:n for j = 1:i-1 Y(i) = Y(i)+Ab(i,j)*Y(j); en

12、d Y(i) = (Ab(i,n+1)-Y(i)/Ab(i,i);endAb = U,Y;X = zeros(n,1);X(n) = Ab(n,n+1)/Ab(n,n);for i = n-1:-1:1 for j = i+1:n X(i) = X(i)+Ab(i,j)*X(j); end X(i) = (Ab(i,n+1)-X(i)/Ab(i,i);endend运行检测:>>A=1 1 1;12 -3 3;-18 3 -1;b=6;15;-15; L,U,Y,X = Doolittle(A,b)运行结果:>>Ab = 1.0000 0 0 6.0000 12.0000

13、 1.0000 0 15.0000 -18.0000 -1.4000 1.0000 -15.0000L = 1.0000 0 0 12.0000 1.0000 0 -18.0000 -1.4000 1.0000U = 1.0000 1.0000 1.0000 0 -15.0000 -9.0000 0 0 4.4000Y = 6.0000 -57.0000 13.2000X = 1.0000 2.00003.0000四、解三角方程组的追赶法1.设系数矩阵为三对角矩阵则方程组Ax=f称为三对角方程组。2.设矩阵A非奇异,A有Crout分解A=LU,其中L为下三角矩阵,U为单位上三角矩阵,记先依次求

14、出L,U中的元素后,令Ux=y,先求解下三角方程组Ly=f得出y,再求解上三角方程组Ux=y。求解三对角方程组的2追赶法将矩阵三角分解的计算与求解两个三角方程组的计算放在一起,使算法吏为紧凑。其计算公式为:3.算法:1.输入a=(a2,,an), b=(b1,,bn), c=(c1,,cn-1), d=(d1,,dn),n2.对i=2,3,nai/bi-1=>ai (li)bi-ci-1ai=>bi (ui)di-aidi-1=>di (yi)3.dn/bn=>dn(xn)4.对i=n-1,n-2,1(di-cidi+1)/bi=>di (xi)5.输出d=x,停

15、机4.Matlab程序:clc;clear;%如果需要验证其他矩阵的解,只需更改A、B和n的值即可A = 2,1,0,0;1,3,1,0;0,1,4,-1;0,0,2,3B = 3;5;4;5n = 4;%获得A中不为0的数存到相应数组中for i = 1:n for j = 1:n if i = j b(i) = A(i,j); end if i = j-1 c(j-1) = A(i,j); end if j = i-1 a(i) = A(i,j); end endend%将变换后的值存入相应矩阵中u(1) = b(1);for i = 2:n; l(i) = a(i)/u(i-1); u(

16、i) = b(i)-l(i)*c(i-1);endfor i = 1:n for j = 1:n if i = j L(i,j) = 1; U(i,j) = u(i); end if i = j-1 U(i,j) = c(i); end if j = i-1 L(i,j) = l(i); end endend% LY=B,UX=Y,进行求解disp('增广矩阵');AB = L,BB = zeros(n,1);B(1) = AB(1,n+1)/AB(1,1);for i = 2:n for j = 1:i-1 B(i) = B(i)+AB(i,j)*B(j); end B(i)

17、 = (AB(i,n+1)-B(i)/AB(i,i);enddisp('解方程LY=B得');Y = BAB = U,B;B = zeros(n,1);B(n) = AB(n,n+1)/AB(n,n);for i = n-1:-1:1 for j = i+1:n B(i) = B(i)+AB(i,j)*B(j); end B(i) = (AB(i,n+1)-B(i)/AB(i,i);enddisp('方程的解为:');X = B运行结果:A = 2 1 0 0 1 3 1 0 0 1 4 -1 0 0 2 3B = 3 5 4 5增广矩阵AB = 1.0000 0 0 0 3.0000 0.5000 1.0000 0 0 5.0000 0 0.4000 1.0000 0 4.0000 0 0 0.5556 1.0000 5.0000解方程LY=B得Y = 3.0000 3.5000 2.6000 3.5556方程的解为:X = 1.0000 1.0000 1.00001.0000五、算法比较:Gauss消去法是针对一般的线性方程组,与线性代数中的初等变换解线性方

温馨提示

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

最新文档

评论

0/150

提交评论