当前位置:网站首页>【线性代数03】消元法展示以及AX=b的4种解情况
【线性代数03】消元法展示以及AX=b的4种解情况
2022-08-04 21:26:00 【月亮鱼与十四行】
本篇仍旧是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]⇒[102−33−6]⇒[102132]⇒[1001−12]=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} [142536∣∣78]⇒[102−33−6∣∣7−20]⇒[102132∣∣720/3]⇒[1001−12∣∣−19/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=x3−19/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⎦⎤⇒⎣⎡1004−3−6⎦⎤⇒⎣⎡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=b⇒A−1AX=A−1b⇒IX=A−1b⇒X=A−1b
于是就有解的形式即为 A − 1 b A^{-1}b A−1b,并可以知道此时 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=B−1b=[−21.51−0.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 m−r行是其余 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 < m | 0解或1解 |
r = n = m | 1解 |
r < m,r < n | 0解或无穷多解 |
边栏推荐
- C language knowledge (1) - overview of C language, data types
- matlab drawing
- 数电快速入门(三)(卡诺图化简法的介绍)
- 开发deepstram的自定义插件,使用gst-dseaxmple插件进行扩充,实现deepstream图像输出前的预处理,实现图像自定义绘制图(精四)
- unity2D横版游戏教程8-音效
- LocalDate时间日期包的用法
- 如何最简单、通俗地理解爬虫的Scrapy框架?
- dotnet delete read-only files
- [2022 Hangzhou Electric Power Multi-School 5 1012 Questions Buy Figurines] Application of STL
- 经验分享|盘点企业进行知识管理时的困惑类型
猜你喜欢
Spss-系统聚类手算实操
1、File对象学习
PRIMAL: Pathfinding via Reinforcement and Imitation Multi-Agent Learning 代码解析
Hands-on Deep Learning_NiN
buu web
Zynq Fpga图像处理之AXI接口应用——axi_lite接口使用
unity2D横版游戏教程8-音效
Arduino 电机测速
[Teach you to use the serial port idle interrupt of the STM32HAL library]
SPSS-unary regression practice
随机推荐
dotnet 启动 JIT 多核心编译提升启动性能
链栈的应用
Spss-一元回归实操
dotnet 删除只读文件
【2022杭电多校5 1012题 Buy Figurines】STL的运用
matlab 画图
proe和creo的区别有哪些
SAP ABAP OData 服务如何支持 $select 有选择性地仅读取部分模型字段值试读版
88.(cesium之家)cesium聚合图
【PCBA方案设计】握力计方案
[Teach you to use the serial port idle interrupt of the STM32HAL library]
C language knowledge (1) - overview of C language, data types
数电快速入门(五)(编码器的介绍以及通用编码器74LS148和74LS147的介绍)
热力学相关的两个定律
unity2D横版游戏教程9-对话框dialog
win10 uwp 使用 WinDbg 调试
LayaBox---TypeScript---结构
实战:10 种实现延迟任务的方法,附代码!
STM32MP157A驱动开发 | 01- 板载LED作为系统心跳指示灯
Win11如何设置软件快捷方式?