Bootstrap

【线性代数03】消元法展示以及AX=b的4种解情况

   本篇仍旧是MIT课程的笔记总结。首先进行消元法的展示,重点体会从矩阵A化为行最简式的过程,然后分类讨论AX = b在不同秩r下的解情况。


消元法展示

   仍旧从一个例子入手,已知矩阵A为:
A = [ 1 2 3 4 5 6 ] A = \begin{bmatrix} 1 &2 & 3 \\ 4 & 5 & 6 \end{bmatrix} A=[142536]

第一部分AX =0

   我们先来考虑方程 A X = 0 AX =0 AX=0 的解的情况,应用初等行变换:
A = [ 1 2 3 4 5 6 ] ⇒ [ 1 2 3 0 − 3 − 6 ] ⇒ [ 1 2 3 0 1 2 ] ⇒ [ 1 0 − 1 0 1 2 ] = R A = \begin{bmatrix} 1 &2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \Rightarrow \begin{bmatrix} 1 &2 & 3 \\ 0 & -3 & -6 \end{bmatrix} \Rightarrow \begin{bmatrix} 1 &2 & 3 \\ 0 &1 & 2\end{bmatrix} \Rightarrow \begin{bmatrix} 1 &0 & -1 \\ 0 & 1 & 2 \end{bmatrix} =R A=[142536][102336][102132][100112]=R
   我们在行最简式R矩阵中可以找到单位矩阵 I I I,并可将其余部分记为 F F F。关注 A X = 0 AX=0 AX=0,我们不难发现这样一个结果, x 1 x_1 x1 x 2 x_2 x2是主列所在行(也即 I I I)对应的未知量,而 x 3 x_3 x3是自由变量,对应着 F F F。如果用如下记号
X ( p i v o t ) = [ x 1 x 2 ]     X ( f r e e ) = [ x 3 ] X(pivot) = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \ \ \ X(free) = \begin{bmatrix} x_3 \end{bmatrix} X(pivot)=[x1x2]   X(free)=[x3]
   那么,对应 A X = 0 AX=0 AX=0的方程就可以写作:
[ I F ] [ X ( p i v o t ) X ( f r e e ) ] = I X ( p i v o t ) + F X ( f r e e ) = 0 \begin{bmatrix} I & F \end{bmatrix} \begin{bmatrix} X(pivot) \\ X(free) \end{bmatrix} =IX(pivot)+FX(free)=0 [IF][X(pivot)X(free)]=IX(pivot)+FX(free)=0
   移项后就有:
X ( p i v o t ) = − F X ( f r e e ) X(pivot)=-FX(free) X(pivot)=FX(free)
   这在我看来是个非常优美的式子,也就是说原方程的解应该有如下的形式:
x 1 = x 3 x 2 = − 2 x 3 x_1 = x_3 \\ x_2 = -2x_3 x1=x3x2=2x3
   在matlab中用rref函数就得到Gauss-Jordan 消元法下的简化的行阶梯形矩阵(reduced row echelon form)。

>> A = [1,2,3;4,5,6];
>> rref(A)

ans =

     1     0    -1
     0     1     2

   也可以用solve函数验证求解的正确性

>> syms x1;syms x2; syms x3;
>> result = solve([x1+2*x2+3*x3,4*x1+5*x2+6*x3]); % result作为struct存在
>> result.x1
 
ans =
 
x3
 
>> result.x2
 
ans =
 
-2*x3

第二部分AX =b

    我们进一步来考虑 A X = b AX=b AX=b的情况,不如假设b列就为7和8,于是我们考虑A的增广矩阵,并应用初等行变换,即
[ 1 2 3 ∣ 7 4 5 6 ∣ 8 ] ⇒ [ 1 2 3 ∣ 7 0 − 3 − 6 ∣ − 20 ] ⇒ [ 1 2 3 ∣ 7 0 1 2 ∣ 20 / 3 ] ⇒ [ 1 0 − 1 ∣ − 19 / 3 0 1 2 ∣ 20 / 3 ] \begin{bmatrix} 1 &2 & 3 & | & 7 \\ 4 & 5 & 6 & | & 8\end{bmatrix} \Rightarrow \begin{bmatrix} 1 &2 & 3 & | & 7 \\ 0 & -3 & -6 & | & -20\end{bmatrix} \Rightarrow \begin{bmatrix} 1 &2 & 3 & | & 7 \\ 0 & 1 & 2 & | & 20/3\end{bmatrix} \Rightarrow \begin{bmatrix} 1 &0 & -1 & | & -19/3 \\ 0 & 1 & 2 & | & 20/3\end{bmatrix} [14253678][102336720][102132720/3][10011219/320/3]
    于是有解为
x 1 = x 3 − 19 / 3 x 2 = − 2 x 3 + 20 / 3 x_1 = x_3-19/3 \\ x_2 = -2x_3+20/3 x1=x319/3x2=2x3+20/3
    同样可以用solve函数验证其正确性

>> syms x1;syms x2; syms x3;
>> result = solve([x1+2*x2+3*x3-7,4*x1+5*x2+6*x3-8]);  % 修改求解方程
>> result.x1
 
ans =
 
x3 - 19/3
 
>> result.x2
 
ans =
 
20/3 - 2*x3

解情况讨论

    根据消元法所展示的例子,我们已经对Gauss-Jordan 消元法求解方程有了浅浅的认识,接下来我们讨论一般性的解情况,即 A X = b AX = b AX=b 在不同秩r下的解情况,其中A是一个 m × n m\times n m×n 的一般性矩阵。在matlab中,用rank函数就能求得矩阵的秩

>> A = [1,2,3;4,5,6];
>> rank(A)

ans =

     2

第1种情况:r = m < n

    在这种情况下,方程数小于未知数个数,必然有无穷多解。且此时由于矩阵的秩为r,所以自由向量的个数为n-r,也即说明解空间应该是一个维数为n-r的超平面。以前文所展示的例子为例,可以画出此时的解空间是一个在3维空间中的1维直线,图示和代码如下所示:请添加图片描述

% 解空间为n-r的超平面
% 定义
syms x1; syms x2;
y1 = x1+19/3; y2 = 10/3-0.0000001*x1-0.5*x2; % 避免默认将x2读成x1
% fsurf画平面
fsurf(y1,EdgeColor='g'); hold on; fsurf(y2,EdgeColor='b'); 
% 画交线
hold on;
fplot3(x1,-2*x1-6,x1+19/3,Color = 'r',Linewidth = 2)
% 标注
legend('x_1+19/3=x_3','10/3 - x_2/2=x_3','交线');
xlabel('x_1'); ylabel('x_2');zlabel('x_3');

第2种情况:r = n < m

    实际上,再取A的转置即可研究
A T = [ 1 4 2 5 3 6 ] ⇒ [ 1 4 0 − 3 0 − 6 ] ⇒ [ 1 0 0 1 0 0 ] = [ I 0 ] = R A^{T} = \begin{bmatrix} 1 &4 \\ 2 & 5 \\ 3 & 6 \end{bmatrix} \Rightarrow \begin{bmatrix} 1 &4 \\ 0 & -3 \\ 0 & -6 \end{bmatrix} \Rightarrow \begin{bmatrix} 1 &0 \\ 0 & 1 \\ 0 & 0 \end{bmatrix} = \begin{bmatrix} I \\ 0 \end{bmatrix} =R AT= 123456 100436 100010 =[I0]=R
    此时可以发现,从行去看, R R R的上部为单位阵 I I I,下部为0矩阵。 此时的方程数多于未知数个数,对于右端结果项b列实则提出了要求,即要么满足为 A T A^T AT各列的线性组合,得到一个特解;要么就无解 。比如对于下面的方程而言,就存在特解 [ 1 , 1 ] T [1,1 ]^T [1,1]T
x 1 + 4 x 2 = 5 2 x 1 + 5 x 2 = 7 3 x 2 + 6 x 3 = 9 x_1+4x_2 = 5 \\ 2x_1 + 5x_2 = 7 \\ 3x_2+6x_3 = 9 x1+4x2=52x1+5x2=73x2+6x3=9
   换言之,此时b列只有是处于 A T A^{T} AT所在的列空间中的某个向量才会有解。此例中,提出的要求相当于b列要位于3维空间中 A T A^T AT所在的二维平面上。同样可以画出相应的图示,图和代码如下请添加图片描述

% b列所在的平面

% 画向量图
quiver3(0,0,0,1,2,3,'m'); hold on; quiver3(0,0,0,4,5,6,'black'); % 基底
hold on;  quiver3(0,0,0,5,7,9,'r');  % 满足条件的b
V1 = [1;2;3]; V2 = [4;5;6];
% 求法向量
Vn = cross(V1,V2);
% 画平面
syms x1;syms x2;syms x3;
plane = -(x1*Vn(1)+x2*Vn(2))/Vn(3);
hold on;
fsurf(plane);
% 标注
legend('基底列1','基底列2','满足条件的b','所在平面');
xlabel('b_1'); ylabel('b_2'); zlabel('b_3');

第3种情况:r = n = m

   直观地看,这将是前两种情况的公共部分,于是当未知数个数与方程个数相等时,将有且仅有一个解。我们可以推导解的一般形式,由于 r = n = m r = n = m r=n=m,故此时方阵可逆。对于方程两边同时左乘A的逆:
A X = b ⇒ A − 1 A X = A − 1 b ⇒ I X = A − 1 b ⇒ X = A − 1 b AX=b \Rightarrow A^{-1}AX=A^{-1}b \Rightarrow IX=A^{-1}b \Rightarrow X=A^{-1}b AX=bA1AX=A1bIX=A1bX=A1b
   于是就有解的形式即为 A − 1 b A^{-1}b A1b,并可以知道此时 R R R就等于单位阵 I I I。也举一个例子
B = [ 1 2 3 4 ]      b = [ 5 6 ] B = \begin{bmatrix} 1 &2 \\ 3 & 4 \end{bmatrix} \ \ \ \ b= \begin{bmatrix} 5 \\ 6 \end{bmatrix} B=[1324]    b=[56]
   则计算结果为
X = B − 1 b = [ − 2 1 1.5 − 0.5 ] [ 5 6 ] = [ − 4 4.5 ] X = B^{-1}b= \begin{bmatrix} -2 & 1 \\ 1.5 &-0.5\end{bmatrix} \begin{bmatrix} 5 \\ 6 \end{bmatrix}= \begin{bmatrix} -4 \\ 4.5 \end{bmatrix} X=B1b=[21.510.5][56]=[44.5]
   用solve函数可验证正确性:

>> syms x1; syms x2;
>> result = solve([x1+2*x2-5,3*x1+4*x2-6]);
>> ans1 = result.x1,ans2 = result.x2
 
ans1 =
 
-4
 
 
ans2 =
 
9/2

第4种情况:r < m,r < n

    这说明了列和行都存在线性相关项,由前面的推导,我们容易得知,此时的R矩阵应有如下的形式:
R = [ I F 0 0 ] R = \begin{bmatrix} I &F \\ 0 & 0 \end{bmatrix} R=[I0F0]
    当 b = 0 b=0 b=0时一定有解0,而当 b ≠ 0 b \ne 0 b=0时则需要满足b列应在矩阵所在的列空间中。
[ I F 0 0 ] [ X ( p i v o t ) X ( f r e e ) ] = [ X ( p i v o t ) + F X ( f r e e ) 0 ] \begin{bmatrix} I &F \\ 0 & 0 \end{bmatrix} \begin{bmatrix} X(pivot) \\ X(free) \end{bmatrix} = \begin{bmatrix} X(pivot) +FX(free) \\ 0 \end{bmatrix} [I0F0][X(pivot)X(free)]=[X(pivot)+FX(free)0]
    即此时需要满足b的 m m m行中有 m − r m-r mr行是其余 r r r行的线性组合时,将有解,且有无穷多解;否则将无解。当然这种有无解条件判断的表述与第2种情况中,需要b列位于矩阵所在的列空间的表述等价
    比如修改矩阵B和对应的列b为
B = [ 1 2 2 4 ]      b = [ 3 6 ] B = \begin{bmatrix} 1 &2 \\ 2 & 4 \end{bmatrix} \ \ \ \ b= \begin{bmatrix} 3 \\ 6 \end{bmatrix} B=[1224]    b=[36]
    此时有解,且解可为 [ 1 , 1 ] T [1,1 ]^T [1,1]T, [ 3 , 0 ] T [3,0 ]^T [3,0]T [ 0 , 1.5 ] T [0,1.5 ]^T [0,1.5]T等等,对b提出的要求可以记为是在二维平面中的1条一维直线 b 2 = 2 b 1 b_2=2b_1 b2=2b1,而解空间则需要满足 x 2 = − 0.5 x 1 + 1.5 x_2=-0.5x_1+1.5 x2=0.5x1+1.5,容易发现这两个空间恰好是互相垂直的。对应的图片展示和代码如下:

请添加图片描述

% 解空间和b列所在空间

syms x1;
% b列所在的直线
fplot(2*x1);
% 解空间所在直线
hold on;
fplot(-x1/2+1.5);
% 标注
xlim([0,3.5]); ylim([0,3]);
% 求交点
hold on;
plot(0.6,1.2,'r+');
legend('b列所在的直线','解空间所在直线','交点(0.6,0.8)');


    最后,用一张表格梳理解的个数。

秩 r解的个数
r = m < n无穷多解
r = n < m0解或1解
r = n = m1解
r < m,r < n0解或无穷多解
;