MATLAB怎么求解线性方程组? 附完整代码和案例
作者:本站作者 人气:线性方程组的直接解法方法很多,包括Gauss消去法、选主元消去法、平方根法和追赶法等等。但是在MATLAB中,可以直接利用“\”或者“/”来解决问题。这两种方法的内部包含非常多的自适应算法,比如对超定方程使用最小二乘法;对欠定方程给出误差范数最小的一个解;对三对角阵方程组使用追赶法。
一. 直接求解:矩阵除法
对线性方程
求解,MATLAB调用格式如下:
调用此函数时,矩阵A、B必须具有相同的行数。如果矩阵A没有正确缩放或者接近奇异矩阵,运行代码时,MATLAB就会显示警告信息。
对矩阵A可以分成如下三种情况:
如果A是标量,那么A\B就等同于A.\B如果A是
方阵,B是n行矩阵,那么A\B就是方程A*X=B的解如果A是
矩阵,而且
,B是m行矩阵,那么A\B返回方程组A*X=B的最小二乘解
例题1
解如下方程:

解:
MATLAB代码如下:
运行结果:
ans =
0.332683779325239-1.4121408627561041.602847655449206-0.500293786006566例题2
A为4阶的幻方矩阵,求解线性方程组Ax=b。b的表达式如下:

备注:幻方矩阵的定义:如果一个数组具有相同行列且每行,每列和对角线上的和都一样,则成这些数组则成为魔方矩阵,又叫幻方矩阵。
解:
MATLAB代码如下:
运行结果:
ans =
0.9803921568627450.9411764705882351.0588235294117651.019607843137255分析:
4阶的幻方矩阵是奇异矩阵,奇异矩阵也能求解,但是MATLAB会生成警告,警告信息如下:
警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确。RCOND = 4.625929e-18。;
例题3
对线性方程组Ax=b进行求解,并分析是否有误差。A,b矩阵如下:
,
解:
MATLAB代码如下:
运行结果:
x =
03.9999999999999970.666666666666670E =
7.160723346098895e-15
分析:此方程属于欠定方程,MATLAB采用最小二乘法进行求解,所以会出现误差
另外最后举一个利用稀疏矩阵对简单线性方程组Ax=B进行求解。
MATLAB代码:
运行结果:
x =
(1,1) 1.000000000000000(2,1) 2.000000000000000(3,1) 3.000000000000000(4,1) 4.000000000000001(5,1) 5.000000000000001E1 =
4.189529226675416e-15
二. 直接求解:判断求解
给定矩阵A,B如下:

形成解的判定矩阵C如下:

线性方程组有解的判断定理将分成三种情况:
2.1 m=n且rank(A)=rank(C)=n
此时,方程组有唯一的解 
例题4
求解如下方程组:

解:
MATLAB代码如下:
运行结果:
rank_A =4rank_C = 4x1 =
-1.800000000000000 2.3999999999999991.866666666666666 -1.2666666666666673.866666666666667 -3.266666666666667-2.133333333333333 2.733333333333333E1 =7.291088482824584e-15
x2 =
[ -9/5, 12/5][28/15, -19/15][ 58/15, -49/15][ -32/15, 41/15]E2 =0
2.2 rank(A)=rank(C)=r<n
此时方程组有无穷多个解。将原方程组可以转化为对应的齐次方程组的解,形式如下:

此时需要求取A矩阵的化零矩阵,MATLAB格式如下:
或者求取A矩阵的化零矩阵的规范形式,MATLAB格式如下:
例题5
求解以下方程组:

解:
MATLAB代码如下:
运行结果:
rank =2
分析:说明有解,且解不止一个
Z =
[ 2, 3][ -5/2, -7/2][ 1, 0][ 0, 1]分析:此结果可以解释为,如下等式:

x0 =
125/13196/131-10/131-39/131E =0
分析:此方法求出的结果没有误差
x2 =
2*a3 + 3*a4 + 125/13196/131 - (7*a4)/2 - (5*a3)/2a3 - 10/131a4 - 39/131分析:此结果可以写成通式如下:

2.3 
此时只能采用摩尔-彭罗斯(Moore-Penrose)广义逆求解出其最小二乘法,MATLAB格式如下:
这种方法只能使误差范数测度||Ax-B||取的最小值,并不能完全符合原始的代数方程。
三. 矩阵求逆解线性方程组
通过反转系数矩阵A,也可以实现对线性方程组Ax=b的求解。不幸的是,与之前反斜杠计算的方法相比,此方法的运算速度会更慢,残差也相对较大。但其实,它也有它的优点,我们来看一道例题。
例题 6
利用八阶的幻方矩阵,来比较MATLAB中x1=A\b和x2=pinv(A)*b两种求解方法的精确度。
解:
MATLAB代码如下:
运行结果:
rank_A1 =3
警告: 秩亏,秩 = 3,tol = 1.882938e-13。
(由于A1矩阵非方阵,所以运算秩时矩阵出现警告,与矩阵秩相关的介绍可以看以下文章)
基于MATLAB的矩阵性质:行列式,秩,迹,范数,特征多项式与矩阵多项式_唠嗑!的博客-CSDN博客
x1 =
2.9999999999999984.000000000000000001.0000000000000020 norm_x1 =5.099019513592784E1 =1.392373714442771e-13x2 =
1.1538461538461511.4615384615384631.3846153846153851.3846153846153831.4615384615384611.153846153846153 norm_x2 =3.281650616569467E2 =4.019436694230464e-13分析:
(1)将A矩阵转换为A1,因为当只有六列时,方程仍然是一致的,依旧存在解,而且解并非全由1组成。另外,由于矩阵低秩,所以会有无数个解。(2)根据范数误差计算的结果,两种求解方法精度一致(3)解x1的特殊之处在于它只有三个非零元素;解x2的特殊之处在于它的norm(x2)非常小
加载全部内容
青云诀 2
奇迹:暗黑深渊
贪玩原始传奇
至尊蓝月
公益传奇
爆装传奇
冒险王2
至尊之刃