MATLAB之方程组求解(八)

线性方程组求解

1.利用矩阵除法

线性方程组的一般形式为:
a 11 x 1 + a 12 x 2 + . . . + a 1 n x n = b 1 a_{11}x_1+a_{12}x_2+...+a_{1n}x_n = b_1 a11x1+a12x2+...+a1nxn=b1

a 21 x 1 + a 22 x 2 + . . . + a 2 n x n = b 2 a_{21}x_1+a_{22}x_2+...+a_{2n}x_n = b_2 a21x1+a22x2+...+a2nxn=b2

. . . ... ...

a n 1 x 1 + a n 2 x 2 + . . . + a n n x n = b n a_{n1}x_1+a_{n2}x_2+...+a_{nn}x_n = b_n an1x1+an2x2+...+annxn=bn

写成矩阵形式为 A x = b Ax=b Ax=b,其中A为矩阵,x和b为向量。

例1.求解下列方程组
{ 2 x 1 − x 2 + x 3 = 4 − x 1 − 2 x 2 + 3 x 3 = 5 x 1 + 3 x 2 + x 3 = 6 \left\{\begin{array}{l} 2 x_{1}-x_{2}+x_{3}=4 \\ -x_{1}-2 x_{2}+3 x_{3}=5 \\ x_{1}+3 x_{2}+x_{3}=6 \end{array}\right. 2x1x2+x3=4x12x2+3x3=5x1+3x2+x3=6
先将方程的系数和结果写成矩阵形式,然后利用命令求解。

A= [2 -1 1;-1 -2 3;1 3 1]

A =

   2    -1     1
  -1    -2     3
   1     3     1

b = [4;5;6]

b =

    4
    5
    6

x = A\b

x =

1.1111
0.7778
2.5556

利用该方法进行求解需要注意是进行左除还是右除。

2.判断线性方程组解

对于线性方程组Ax=b,其中 A ϵ R m ∗ n , b ϵ R m A\epsilon R^{m*n},b\epsilon R^m AϵRmn,bϵRm。若m=n,我们称之为恰定方程组;若m>n,我们称之为超定方程组;若m<n,我们称之为欠定方程组。若b=0,则相应的方程组称为齐次线性方程组,否则称为非齐次线性方程组。对于齐次线性方程组解的个数有下面的定理。
定理1:设方程组系数矩阵A的秩为r,则
(1)若r=n,则齐次线性方程组有唯一解。

(2若r<n,则齐次线性方程组有无穷解。
对于非齐次线性方程组解的存在性有下面的定理。
定理2:设方程组系数矩阵A的秩为r,增广矩阵[Ab]的秩为s,则
( 1)若r=s=n,则非齐次线性方程组有唯一解。
(2)若r=s<n,则非齐次线性方程组有无穷解。
(3)若r≠s,则非齐次线性方程组无解。
关于齐次线性方程组与非齐次线性方程组之间的关系有下面的定理。
定理3:非齐次线性方程组的通解等于其一个特解与对应齐次方程组的通解之和。
若线性方程组有无穷多解,我们希望找到一个基础解系以此来表示相应齐次方程组的通解 k 1 η 1 + k 2 η 2 + ⋯ + k r η r ( k i ∈ R ) k_{1} \eta_{1}+k_{2} \eta_{2}+\cdots+k_{r} \eta_{r}\left(k_{i} \in R\right) k1η1+k2η2++krηr(kiR)。对于这个基础解系,我们可以通过求矩阵A的核空间矩阵得到,在MATLAB中,可以用null命令得到A的核空间矩阵。其调用格式如表所示。

调用格式说明
z = null(A)返回矩阵A的核空间矩阵z,z中的列向量为方程组的一个基础解系
z = null(A,‘r’)z的列向量是方程的一个有理基

例2.求方程组

{ x 1 + 2 x 2 + 2 x 3 + x 4 = 0 2 x 1 + x 2 − 2 x 3 − 2 x 4 = 0 x 1 − x 2 − 4 x 3 − 3 x 4 = 0 \left\{\begin{array}{c} x_{1}+2 x_{2}+2 x_{3}+x_{4}=0 \\ 2 x_{1}+x_{2}-2 x_{3}-2 x_{4}=0 \\ x_{1}-x_{2}-4 x_{3}-3 x_{4}=0 \end{array}\right. x1+2x2+2x3+x4=02x1+x22x32x4=0x1x24x33x4=0

的通解

clear
A = [1,2,2,1;2,1,-2,-2;1,-1,-4,-3];
format rat

Z = null(A,'r')

Z =

   2              5/3     
  -2             -4/3     
   1              0       
   0              1       

所以该方程的通解由上面的计算结果可以知道,
x = k 1 [ 2 − 2 1 0 ] + k 2 [ 5 / 3 − 4 / 3 0 1 ] ( k 1 , k 2 ∈ R ) x=k_{1}\left[\begin{array}{c} 2 \\ -2 \\ 1 \\ 0 \end{array}\right]+k_{2}\left[\begin{array}{c} 5 / 3 \\ -4 / 3 \\ 0 \\ 1 \end{array}\right]\left(k_{1}, k_{2} \in R\right) x=k12210+k25/34/301(k1,k2R)

3.利用矩阵的逆(伪逆)与除法求解

对于线性方程组 A x = b Ax= b Ax=b,若其为​​​恰定方程组且A是非奇异的,则可以利用矩阵的逆进行求解,即 x = A − 1 b x = A^{-1}b x=A1b,若不为恰定方程组,则可以利用伪逆进行求解。

Ps:有关恰定方程组的概念以及其他的更多的知识请参考下面这篇文章:

https://www.cnblogs.com/CQBZOIer-zyy/p/5931174.html

例3:求线性方程组 { x 1 + 2 x 2 + 2 x 3 = 1 x 2 − 2 x 3 − 2 x 4 = 2 x 1 + 3 x 2 − 2 x 4 = 3 \left\{\begin{array}{l}x_{1}+2 x_{2}+2 x_{3}=1 \\ x_{2}-2 x_{3}-2 x_{4}=2 \\ x_{1}+3 x_{2}-2 x_{4}=3\end{array}\right. x1+2x2+2x3=1x22x32x4=2x1+3x22x4=3的通解

clear

format rat
A = [1,2,2,0;0,1,-2,-2;1,3,0,-2]

A =

       1              2              2              0       
       0              1             -2             -2       
       1              3              0             -2       

b=[1;2;3];
x0=pinv(A)*b

x0 =

      13/77    
      46/77    
      -2/11    
     -40/77    

Z=null(A,'r')

Z =



  -6             -4       
   2              2       
   1              0       
   0              1       


因此该方程的解为:

x = [ 13 / 77 46 / 77 − 2 / 11 − 40 / 77 ] + k 1 [ − 6 2 1 0 ] + k 2 [ − 4 2 0 1 ] ( k 1 , k 2 ∈ R ) x=\left[\begin{array}{c}13 / 77 \\ 46 / 77 \\ -2 / 11 \\ -40 / 77\end{array}\right]+k_{1}\left[\begin{array}{c}-6 \\ 2 \\ 1 \\ 0\end{array}\right]+k_{2}\left[\begin{array}{c}-4 \\ 2 \\ 0 \\ 1\end{array}\right]\left(k_{1}, k_{2} \in R\right) x=13/7746/772/1140/77+k16210+k24201(k1,k2R)

4.利用行阶梯进行求解

适用于恰定方程组,且系数矩阵非奇异。

将一个矩阵转化为行阶梯矩阵的命令是rref,其调用格式如下:

命令说明
R=rref(A)利用高斯消去法得到A的行阶梯矩阵R
(R,jb)=rref(A)得到A的行阶梯矩阵R和向量jb
(R,jb)=rref(A,tol)基于给定误差限tol的行阶梯矩阵R以及jb

当系数矩阵非奇异时,可以利用该命令增广矩阵化为行阶梯矩阵,最后一列为方程的解。

例4:

{ 5 x 1 + 6 x 2 = 1 x 1 + 5 x 2 + 6 x 3 = 0 x 2 + 5 x 3 + 6 x 4 = 0 x 3 + 5 x 4 + 6 x 5 = 0 x 4 + 5 x 5 = 1 \left\{\begin{aligned} 5 x_{1}+6 x_{2} &=1 \\ x_{1}+5 x_{2}+6 x_{3} &=0 \\ x_{2}+5 x_{3}+6 x_{4} &=0 \\ x_{3}+5 x_{4}+6 x_{5} &=0 \\ x_{4}+5 x_{5} &=1 \end{aligned}\right. 5x1+6x2x1+5x2+6x3x2+5x3+6x4x3+5x4+6x5x4+5x5=1=0=0=0=1 的解

format rat

A = [5 6 0 0 0;1 5 6 0 0;0 1 5 6 0;0 0 1 5 6;0 0 0 1 5];
b=[1;0;0;0;1];
r = rank(A)

r =           %判断A是否非奇异

​       5       

B = [A,b];
R = rref(B)      %将B化为行阶梯矩阵

R =

  1 至 5 列

​       1              0              0              0              0       
​       0              1              0              0              0       
​       0              0              1              0              0       
​       0              0              0              1              0       
​       0              0              0              0              1       

  6 列          %该列即为方程组的解



 911/402   
-229/133   
  37/35    
 -79/133   
  95/298   

关于奇异与非奇异的几点说明:

奇异矩阵就是对应的行列式等于0的矩阵,反之则为非奇异矩阵。

首先,看这个矩阵是不是方阵(即行数和列数相等的矩阵。若行数和列数不相等,那就谈不上奇异矩阵和非奇异矩阵)。

然后,再看此矩阵的行列式|A|是否等于0,若等于0,称矩阵A为奇异矩阵;若不等于0,称矩阵A为非奇异矩阵。

同时,由|A|≠0可知矩阵A可逆,这样可以得出另外一个重要结论:可逆矩阵就是非奇异矩阵,非奇异矩阵也是可逆矩阵。 如果A为奇异矩阵,则AX=0有无穷解,AX=b有无穷解或者无解。如果A为非奇异矩阵,则AX=0有且只有唯一零解,AX=b有唯一解。

上面程序中,通过求A的矩阵的秩判断是否奇异,当矩阵的秩等于自变量的个数n时,即 R ( A ) = n R(A)=n R(A)=n,则可以判断行列式不等于0,则为非奇异矩阵,进而可以通过将方程组的增广矩阵化为行阶梯矩阵求解。

5.矩阵分解法求解

关于矩阵分解法将会在以后的文章中阐述。

6.非负最小二乘法

MATLAB中可以利用lsqnonneg命令实现,实际上说解二次规划问题:

min ⁡ ∥ A x − b ∥ 2  s.t.  x i ⩾ 0 , i = 1 , 2 , ⋯ n \begin{array}{ll}\min & \|A x-b\|_{2} \\ \text { s.t. } & x_{i} \geqslant 0, i=1,2, \cdots n\end{array} min s.t. Axb2xi0,i=1,2,n

{ x 2 − x 3 + 2 x 4 = 1 x 1 − x 3 + x 4 = 0 − 2 x 1 + x 2 + x 4 = 1 \left\{\begin{array}{c}x_{2}-x_{3}+2 x_{4}=1 \\ x_{1}-x_{3}+x_{4}=0 \\ -2 x_{1}+x_{2}+x_{4}=1\end{array}\right. x2x3+2x4=1x1x3+x4=02x1+x2+x4=1的最小二乘解

A = [0 1 -1 2;1 0 -1 1;-2 1 0 1];
b = [1;0;1];
x0=lsqnonneg(A,b)

x0 =



  0       
  1       
  0       
  1/6004799503160661
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB提供了多种方法来求解线性方程组。其中主要包括直接法和迭代法两种方法。 直接法是将线性方程组求解问题转化为三角方程组求解问题。在MATLAB中,可以使用高斯消去法、列主元消去法和矩阵的三角分解法等直接解法。其中,高斯消去法是一个经典的直接法,列主元消去法是目前计算机上求解线性方程组的标准算法。可以使用左除运算符"\ "来求解线性方程组,它使用列主元消去法。例如,给定线性方程组Ax=b,可以使用左除运算符求解,即x=A\b。这种方法使用起来很方便。 迭代法是通过迭代逼近来求解线性方程组。在MATLAB中,可以使用Jacobi迭代法、Gauss-Seidel迭代法、SOR迭代法等迭代方法来求解线性方程组。这些方法通过迭代计算来逐步逼近线性方程组的解。 总之,MATLAB提供了多种直接法和迭代法来求解线性方程组,可以根据具体情况选择合适的方法进行求解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [matlab线性方程组求解](https://blog.csdn.net/DXFGJ/article/details/108143942)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [基于MATLAB求解线性方程组(附完整代码和例题)](https://blog.csdn.net/forest_LL/article/details/124209950)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值