第三章解线性方程组的直接方法的matlab程序.doc
《第三章解线性方程组的直接方法的matlab程序.doc》由会员分享,可在线阅读,更多相关《第三章解线性方程组的直接方法的matlab程序.doc(16页珍藏版)》请在沃文网上搜索。
1、高等教育出版社 教育电子音像出版社 作者:任玉杰 第三章 解线性方程组的直接方法的MATLAB程序第三章 解线性方程组的直接方法在科技、工程、医学和经济等各个领域中,经常遇到求解包含个未知数、由个方程构成的线性方程组 (3.1)的问题.线性方程组(3.1)的解法一般有直接法和迭代法.迭代法是求解大型稀疏矩阵方程组,尤其是由微分方程离散后得到的大型方程组的重要方法.在这章中我们要学习线性方程组的直接法,特别是适合用数学软件在计算机上求解的方法.3.1 方程组的逆矩阵解法及其MATLAB程序3.1.1 逆矩阵、行列式及其MATLAB命令当矩阵为方阵时,的行列式通常表示为或.当时,可逆,且可以用表
2、3-1中的MATLAB命令求的逆矩阵和行列式. 表 3-1命 令功 能NA=inv(A)输入矩阵,运行后输出的逆矩阵;HA=det(A)输入矩阵,运行后输出的行列式的值.3.1.2 方程组的逆矩阵解法及其MATLAB程序在MATLAB中引进了矩阵除法的概念,它包括左除和右除.设两矩阵为阶方阵,且,皆可逆,则矩阵方程,,的解都可以用表 3-2中的命令求出. 表 3-2命 令相同功能的命令功 能X=ACX= inv(A)*C输入矩阵和C,运行后输出矩阵方程的解Y=D/BY=D*inv(B)输入矩阵和,运行后输出矩阵方程的解Z=A F/BZ= inv(A)*F* inv(B)输入矩阵,和,运行后输出
3、矩阵方程的解3.1.3 线性方程组有解的判定条件及其MATLAB程序解非齐次线性方程组,将其增广矩阵化成行阶梯形矩阵,便可判断其是否有解若有解,化成行最简形矩阵,便可写出其通解.判定线性方程组是否有解的MATLAB程序输入的量:系数矩阵和常数向量;输出的量:RA和RB分别是系数矩阵和增广矩阵的秩, n是方程组中未知量的个数,另外还输出有关方程组解的信息.说明:(1)求矩阵的秩用MATLAB命令:RA=rank(A).(2)如果有唯一解,则用表 3-2方法求解; 如果有无穷多解,则将其增广矩阵化成行最简形矩阵,便可写出其通解.根据线性方程组有解的判定条件,现提供判定线性方程组是否有解的MATLA
4、B程序function RA,RB,n=jiepb(A,b)B=A b;n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA;if zhica0,disp(请注意:因为RA=RB,所以此方程组无解.)returnendif RA=RB if RA=ndisp(请注意:因为RA=RB=n,所以此方程组有唯一解.) else disp(请注意:因为RA=RB A=2 3 -1 5;3 1 2 -7;4 1 -3 6;1 -2 4 -7; b= 0; 0; 0; 0; RA,RB,n=jiepb(A,b)运行后输出结果为请注意:因为RA=RB=n,所以此方程
5、组有唯一解.RA = 4,RB =4,n =4在MATLAB工作窗口输入X=Ab, 运行后输出结果为 X =(0 0 0 0).(2) 在MATLAB工作窗口输入程序 A=3 4 -5 7;2 -3 3 -2;4 11 -13 16;7 -2 1 3;b= 0; 0; 0; 0;RA,RB,n=jiepb(A,b)运行后输出结果请注意:因为RA=RB A=4 2 -1;3 -1 2;11 3 0; b=2;10;8; RA,RB,n=jiepb(A,B)运行后输出结果请注意:因为RA=RB,所以此方程组无解.RA =2,RB =3,n =3(4)在MATLAB工作窗口输入程序 A=2 1 -1
6、 1;4 2 -2 1;2 1 -1 -1; b=1; 2; 1; RA,RB,n=jiepb(A,b)运行后输出结果请注意:因为RA=RB0,disp(请注意:因为RA=RB,所以此方程组无解.)returnendif RA=RB if RA=ndisp(请注意:因为RA=RB=n,所以此方程组有唯一解.) X=zeros(n,1); X(n)=b(n)/A(n,n);for k=n-1:-1:1 X(k)=(b(k)-sum(A(k,k+1:n)*X(k+1:n)/A(k,k); end else disp(请注意:因为RA=RBA=5 -1 2 3;0 -2 7 -4;0 0 6 5;0
7、 0 0 3;b=20; -7; 4;6; RA,RB,n,X=shangsan(A,b)运行后输出结果请注意:因为RA=RB=n,所以此方程组有唯一解.RA = RB =4, 4,n = 4,X =2.4 -4.0 -1.0 2.03.3 高斯(Gauss)消元法和列主元消元法及其MATLAB程序3.3.1 高斯消元法及其MATLAB程序现提供的MATLAB程序是利用高斯消元法解线性方程组的MATLAB程序.用高斯消元法解线性方程组的MATLAB程序输入的量:系数矩阵和常系数向量;输出的量:系数矩阵和增广矩阵的秩RA,RB, 方程组中未知量的个数n和有关方程组解及其解的信息.function
8、 RA,RB,n,X=gaus(A,b)B=A b; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA;if zhica0,disp(请注意:因为RA=RB,所以此方程组无解.)returnendif RA=RB if RA=ndisp(请注意:因为RA=RB=n,所以此方程组有唯一解.) X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1for 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);endend b=B(1:n,n+1);A
9、=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); endelse disp(请注意:因为RA=RB A=1 -1 1 -3; 0 -1 -1 1;2 -2 -4 6;1 -2 -4 1; b=1;0; -1;-1; RA,RB,n,X =gaus (A,b)运行后输出结果请注意:因为RA=RB=n,所以此方程组有唯一解.X = 0 -0.5000 0.5000 0RA = 4RB = 4n = 43.3.2 列主元消元法及其MATLAB程序现提供的MATLAB程序是利
10、用回代法解上三角形线性方程组.关于解下三角形线性方程组的程序与之类似.用列主元消元法解线性方程组的MATLAB程序输入的量:系数矩阵和常系数向量;输出的量:系数矩阵和增广矩阵的秩RA,RB, 方程组中未知量的个数n和有关方程组解及其解的信息.function RA,RB,n,X=liezhu(A,b)B=A b; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA;if zhica0,disp(请注意:因为RA=RB,所以此方程组无解.)returnendif RA=RB if RA=ndisp(请注意:因为RA=RB=n,所以此方程组有唯一解.)
11、X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1Y,j=max(abs(B(p:n,p); C=B(p,:);B(p,:)= B(j+p-1,:); B(j+p-1,:)=C;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);endend 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); endelse disp(请注意
12、:因为RA=RB A=0 -1 -1 1;1 -1 1 -3;2 -2 -4 6;1 -2 -4 1; b=0;1;-1;-1; RA,RB,n,X=liezhu(A,b)运行后输出结果请注意:因为RA=RB=n,所以此方程组有唯一解.RA = 4,RB = 4,n = 4,X =0 -0.5 0.5 03.4 LU分解法及其MATLAB程序3.4.1判断矩阵LU分解的充要条件及其MATLAB程序根据定理3.5和(3.16)式,现提供MATLAB程序如下:判断矩阵能否进行LU分解的MATLAB程序输入的量:系数矩阵;运行后输出的量:矩阵的秩R和各阶顺序主子式) 的值hl及其相关信息,能否进行L
13、U分解的信息.function hl=pdLUfj(A)n n =size(A); RA=rank(A); if RA=ndisp(请注意:因为A的n阶行列式hl等于零,所以A不能进行LU分解.A的秩RA如下:), RA,hl=det(A); returnendif RA=n for p=1:n,h(p)=det(A(1:p, 1:p);, endhl=h(1:n);for i=1:nif h(1,i)=0disp(请注意:因为A的r阶主子式等于零,所以A不能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:),hl;RA,returnendend if h(1,i)=0 disp(请注
14、意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:)hl;RAendend例3.4.1 判断下列矩阵能否进行LU分解,并求矩阵的秩.(1);(2);(3).解 (1)在MATLAB工作窗口输入程序 A=1 2 3;1 12 7;4 5 6;hl=pdLUfj(A)运行后输出结果为请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:RA = 3, hl = 1 10 -48(2)在MATLAB工作窗口输入程序 A=1 2 3;1 2 7;4 5 6;hl=pdLUfj(A)运行后输出结果为请注意:因
15、为A的r阶主子式等于零,所以A不能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:RA = 3, hl =1 0 12(3)在MATLAB工作窗口输入程序 A=1 2 3;1 2 3;4 5 6;hl=pdLUfj(A)运行后输出结果为请注意:因为A的n阶行列式hl等于零,所以A不能进行LU分解.A的秩RA如下RA = 2, hl = 03.4.2 直接LU分解法及其MATLAB程序根据定理3.5和(3.16)式,现提供MATLAB程序如下:将矩阵进行直接LU分解的MATLAB程序输入的量:系数矩阵;输出的量:矩阵的秩RA和各阶顺序主子式) 的值hl及其相关信息,能否进行LU分解的信息
16、.如果能进行LU分解,则输出和.function hl=zhjLU(A)n n =size(A); RA=rank(A); if RA=ndisp(请注意:因为A的n阶行列式hl等于零,所以A不能进行LU分解.A的秩RA如下), RA,hl=det(A);returnendif RA=n for p=1:nh(p)=det(A(1:p, 1:p);endhl=h(1:n);for i=1:nif h(1,i)=0disp(请注意:因为A的r阶主子式等于零,所以A不能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:), hl;RAreturnendend if h(1,i)=0 disp
17、(请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:)for j=1:nU(1,j)=A(1,j);endfor k=2:nfor i=2:n for j=2:n L(1,1)=1;L(i,i)=1; if ijL(1,1)=1;L(2,1)=A(2,1)/U(1,1); L(i,1)=A(i,1)/U(1,1);L(i,k)=(A(i,k)- L(i,1:k-1)*U(1:k-1,k)/U(k,k);elseU(k,j)=A(k,j)-L(k,1:k-1)*U(1:k-1,j);endendendendhl;RA,U,Lendend例3.4
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 线性方程组 直接 方法 matlab 程序
