内容发布更新时间 : 2024/11/6 8:01:34星期一 下面是文章的全部内容请认真阅读。
第三章 解线性方程组的直接方法
在科技、工程、医学和经济等各个领域中,经常遇到求解包含n个未知数、由m个方程构成的线性方程组
?a11x1?a12x2???a1nxn?b1?ax?ax???ax?b?2112222nn2 (3.1) ??????am1x1?am2x2???amnxn?bm的问题.线性方程组(3.1)的解法一般有直接法和迭代法.迭代法是求解大型稀疏矩
阵方程组,尤其是由微分方程离散后得到的大型方程组的重要方法.在这章中我们要学习线性方程组的直接法,特别是适合用数学软件在计算机上求解的方法.
3.1 方程组的逆矩阵解法及其MATLAB程序
3.1.1 逆矩阵、行列式及其MATLAB命令
当矩阵A为方阵时,A的行列式通常表示为det(A)或A.当det(A)?0时,A可逆,且可以用表 3-1中的MATLAB命令求A的逆矩阵和行列式.
表 3-1 命 令 NA=inv(A) HA=det(A) 功 能 输入矩阵A,运行后输出A的逆矩阵A?1; 输入矩阵A,运行后输出A的行列式det(A)的值. 3.1.2 方程组的逆矩阵解法及其MATLAB程序
在MATLAB中引进了矩阵除法的概念,它包括左除和右除.设两矩阵A,B为n阶方阵,且A,B皆可逆,则矩阵方程AX?C,YB?D,AZB?F的解都可以用表 3-2中的命令求出.
表 3-2 命 令 X=A\\C Y=D/B Z=A\\ F/B 相同功能的命令 X= inv(A)*C Y=D*inv(B) Z= inv(A)*F* inv(B) 功 能 输入矩阵A和C,运行后输出矩阵方程AX?C的解X?A?1C 输入矩阵B和D,运行后输出矩阵方程YB?D的解Y?DB?1 输入矩阵A,B和F,运行后输出矩阵?1?1方程AZB?F的解Z?AFB 3.1.3 线性方程组有解的判定条件及其MATLAB程序
解非齐次线性方程组,将其增广矩阵化成行阶梯形矩阵,便可判断其是否有解.若有解,化成行最简形矩阵,便可写出其通解. 判定线性方程组Am?nX?b是否有解的MATLAB程序 输入的量:系数矩阵A和常数向量b; 输出的量:RA和RB分别是系数矩阵A和增广矩阵B的秩, n是方程组中未知量的个数,另外还输出有关方程组解的信息. 说明:(1)求矩阵A的秩用MATLAB命令:RA=rank(A). (2)如果有唯一解,则用表 3-2方法求解; 如果有无穷多解,则将其增广矩阵化成行最简形矩阵,便可写出其通解. 根据线性方程组有解的判定条件,现提供判定线性方程组是否有解的MATLAB程序 function [RA,RB,n]=jiepb(A,b)
B=[A b];n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0,
disp('请注意:因为RA~=RB,所以此方程组无解.') return end
if RA==RB if RA==n
disp('请注意:因为RA=RB=n,所以此方程组有唯一解.') else
disp('请注意:因为RA=RB 例3.1.4 判断下列线性方程组解的情况.如果有唯一解,则用表 3-2方法求解. ?3x1?4x2?5x3?7x4?0,?2x1?3x2?x3?5x4?0,?2x?3x?3x?2x?0,?3x?x?2x?7x?0,1234?1234(1) ? (2) ? ??4x1?11x2?13x3?16x4?0,?4x1?x2?3x3?6x4?0,???7x1?2x2?x3?3x4?0;?x1?2x2?4x3?7x4?0;?4x1?2x2?x3?2,?2x?y?z?w?1,?(3) ?3x1?x2?2x3?10, (4) ??4x?2y?2z?w?2, ?11x?3x?8;?2x?y?z?w?1.?2?1解 在MATLAB工作窗口输入程序 >> 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,所以此方程组有唯一解. RA = 4,RB =4,n =4 在MATLAB工作窗口输入 >>X=A\\b, 运行后输出结果为 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 (3) 在MATLAB工作窗口输入程序 >> 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 1;4 2 -2 1;2 1 -1 -1]; b=[1; 2; 1]; [RA,RB,n]=jiepb(A,b) 运行后输出结果 请注意:因为RA=RB 3.2 三角形方程组的解法及其MATLAB程序 用初等行变换解线性方程组是解线性方程组的一般方法.从例3.1.6可见,当方程的个数和未知量的个数很大时,用初等行变换解线性方程组的工作量相当的大,如果在计算过程中某一步发生错误,那么就会得出错误的结果.人们非常想用计算机的程序解线性方程组,而高斯(Gauss)消元法以及各种变形的高斯消元法使得用初等行变换解线性方程组实现机械化计算成为可能. 3.2.2 解三角形方程组的MATLAB程序 现提供的MATLAB程序是利用回代法解上三角形线性方程组,解下三角形线性方程组的程序类似. 解上三角形线性方程组AX?b的MATLAB程序 输入的量:系数矩阵A和常系数向量b; 运行后输出的量:系数矩阵A和增广矩阵B的秩RA,RB, 方程组中未知量的个数n和有关方程组解X及其解的信息. function [RA,RB,n,X]=shangsan(A,b) B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('请注意:因为RA~=RB,所以此方程组无解.') return end if RA==RB if RA==n disp('请注意:因为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=RB end end 例3.2.2 用解上三角形线性方程组的MATLAB程序解例3.2.1中的方程组. 解 在MATLAB工作窗口输入程序 >>A=[5 -1 2 3;0 -2 7 -4;0 0 6 5;0 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.0]’ 3.3 高斯(Gauss)消元法和列主元消元法及其MATLAB程序