MATLAB-线性方程组求解

线性方程组是线性代数中的重要内容之一,其理论发展的最为完善。MATLAB中包含多种处理线性方程组的命令,下面进行详细介绍。

对于形如AX=B的方程组来说,假设其系数矩阵A是m×n的矩阵,根据其维数可以将方程组分以下3种情况。

1)若m=n,则为恰定方程组,即方程数等于未知量数。

2)若m>n,则为超定方程组,即方程数大于未知量数。

3)若m<n,则为欠定方程组,即方程数小于未知量数。

线性方程组解的类型也可以分为以下3种情况。

1)若rank(A)= rank( [ A | B])≥n,则方程组有唯一解。

2)若rank( A)= rank([A| B])<n,则方程组有无穷解。

3)若rank(A )≠rank([A|B]),则方程组无解。

不难看出,线性方程组解的类型是由对应齐次方程组的解、对应系数矩阵和增广矩阵间的关系共同决定的。

非齐次线性方程组AX=B解的形式可以描述如下。

1)使用null 函数求解对应非齐次线性方程组AX=B对应的齐次方程组AX=0的基础解系,也可以称为通解,则AX=B的解都可以通过通解的线性组合表示。

2)求解非齐次线性方程组AX=B的特解。

3)最后求得非齐次线性方程组AX=B解的形式为通解的线性组合加上特解。下面介绍 MATLAB中求解线形方程组的方法。

除法求解方法

若线性方程组AX=B的系数矩阵可逆,则A \B给出方程组的唯一解。

例1:使用除法求解系数矩阵可逆的恰定线性方程组。

在命令行窗口中输入如下语句。

>>A=pascal(4) %A为四阶可道矩阵

det_A =det(A) %计算矩阵A的行列式

B= rand(4,1) %随机生成4行1列的矩阵B

X1=A\B %求出方程唯一解

X2 =in(A) *B %A\B等价于inv(A)*B

命令行窗口中的输出结果如下。

A=

1 1 1 1

1 2 3 4

1 3 6 10

1 4 10 20

det_A=

1.000

B=

0.8147

0.9058

0.1270

0.9134

X1=

-2.5813

9.1360

-8.1751

2.4351

X2=

-2.5813

9.1360

-8.1751

2.4351

若线性方程组AX=B的系数矩阵不可逆,则方程组的解不存在或者不唯一。此时执行A\B,则 MATLAB会显示提示信息,表示该矩阵是奇异矩阵,无法得到精确的数值解。

例2:使用除法求解欠定线性方程组。

在命令行窗口中输入如下语句。

>>C= magic(4);

A=C(2;4,:)

B=[ 0;1;0];

X=A\B

命令行窗口中的输出结果如下所示。

A=

5 11 10 8

9 7 6 12

4 14 15 1

X=

0.2475

-0.0662

0

-0. 0637

例3:使用除法求解超定线性方程组。在命令行窗口中输入如下语句。

>>T=magie(5)

A=T(:,2:5)

B=[0;0;1 ;0;0];

X=AIB

命令行窗口中的输出结果如下所示。

T=

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

A=

24 1 8 15

5 7 14 16

6 13 20 22

12 19 21 3

18 25 2 9

X=

-0.0222

0. 0060

0.0034

0.0303

求逆求解方法

例1中,已经介绍了通过求逆的方法求解线性方程组的解,这里着重介绍利用伪逆方法求解。对于方程组而言,其系数矩阵可能是方阵但不可逆,也可能不是方阵,无论上述两种情况的哪一种都将导致它的逆不存在或无意义,此时就需要引入伪逆的概念。

伪逆矩阵包含很多种形式(具体情况请参考矩阵的有关书籍),下面介绍最常用的基于

最小二乘的最优伪逆。MATLAB使用pinv函数来实现,即可以使用矩阵A的伪逆矩阵pinv(A)来得到方程的一个解,其对应的数值解为pinv( A) * B。

例4使用伪逆矩阵的方法求解奇异矩阵线性方程组的解。

在命令行窗口中输人如下语句。

>>A=[ 1 5 8;-135;174];

B=[3;6;9];

X= pinv(A)* B

C=A*X

命令行窗口中的输出结果如下所示。

X=

-2.6897

1. 9655

-0. 5172

C=

3.0000

6.0000

9. 0000

从例题中的输出结果可以看出,通过使用伪逆矩阵的方法可以求解得到数值解,同时该数值解可以精确地满足预期结果。

上面的例子都是介绍如何计算特解,下面介绍如何计算线性方程组的所有解。

例5使用求逆法计算线性方程组的所有解。

在命令行窗口中输入如下语句。

>>A=[1 3 5 7;2 4 6 8;9 10 11 12];

B=[1;2;3];

X1=null(A)

X2 = pinv(A)*B

命令行窗口中的输出结果如下所示。

X1=

0.5336 -0.1237

-0.6193 0.5626

-0.3622 -0.7542

0.4479 0.3153

X2=

0.0344

0.0579

0.0814

0.1049

此时线性方程组的所有解为X=a×X1( :,1 )+b×X2 ,( :,2)+X2,其中a、b为任意实数。


版权声明:本文为weixin_56691527原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。