学习资源:
- 麻省理工公开课:线性代数【讲师:Gilbert Strang】
- 绘图工具 - Geogebra
个人笔记
矩阵的消元
本节中我们将使用到这个方程组:
{
x
+
2
y
+
z
=
2
3
x
+
8
y
+
z
=
12
4
y
+
z
=
2
\begin{cases} x&+&2y&+&z&=&2\\ 3x&+&8y&+&z&=&12\\ &&4y&+&z&=&2\\ \end{cases}
⎩⎪⎨⎪⎧x3x++2y8y4y+++zzz===2122
根据以前的知识,求解这个方程组要计算很多等式,这个太麻烦了。有没有更加简洁点的方法?
在进行普通的求解方程组时,我们常用的方法就是对方程组进行消元,先把某个变量消去,然后计算剩余的变量的值。但是这个过程中需要计算太多的等式,看起来极其复杂。
我们仔细思考一下,在求解方程组的过程中,我实际上是对系数进行了操作,既然如此,为何不将系数矩阵提取出来。对矩阵进行计算求解呢?
让我们开启矩阵消元之旅吧~
我们先从原方程组中按行提取出等式Ax=b的系数矩阵A和目标矩阵b:
A
=
[
1
2
1
3
8
1
0
4
1
]
b
=
[
2
12
2
]
A= \begin{bmatrix} 1&2&1\\ 3&8&1\\ 0&4&1\\ \end{bmatrix} \quad b= \begin{bmatrix} 2\\ 12\\ 2 \end{bmatrix}
A=⎣⎡130284111⎦⎤b=⎣⎡2122⎦⎤
矩阵的消元包括两个步骤:消元(Elimination) 与 回代(Back substitution)
消元(Elimination) :
这里为了不让叙述包含太多文字先给出一些定义:
a[i,j] 表示矩阵中第i行j列的元素,注意我们i和j的初始值是1,而不是0,阅读的时候请注意这一点;
[
1
2
1
3
8
1
0
4
1
]
\begin{bmatrix} 1&2&1\\ 3&8&1\\ 0&4&1\\ \end{bmatrix}
⎣⎡130284111⎦⎤
第一步,我们把A中第一行第一列的元素a[1,1] = 1称为主元(1st Pivot),那么现在我们要做的就是消去a[2,1],我们要让他变为0,对应到原方程组中,我们就能消去方程2中的变量x。步骤为:将A的第一行所有元素*3,然后让第二行减去第一行,注意,这并不表示第一行的元素的值就改变了,这里只是以第一行为基础进行计算。
[
1
2
1
3
8
1
0
4
1
]
=
>
[
1
2
1
0
2
−
2
0
4
1
]
\begin{bmatrix} 1&2&1\\ 3&8&1\\ 0&4&1\\ \end{bmatrix} => \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&4&1\\ \end{bmatrix}
⎣⎡130284111⎦⎤=>⎣⎡1002241−21⎦⎤
这里有个问题,目标矩阵b呢,我们不是应该对b也同时进行计算吗?这个问题我们将会在回代中给出解答,在这里我们首先对系数矩阵A进行消元,看看它是不是一个好的矩阵。
消掉a[2,1]后,我们把a[2,2]认定为第二个主元(2nd Pivot)。
第二步,我们要消掉a[3,2],方法跟第一步一样。步骤为:第二行所有元素*2,然后用第三行减去第二行。
[
1
2
1
3
8
1
0
4
1
]
=
>
[
1
2
1
0
2
−
2
0
4
1
]
=
>
[
1
2
1
0
2
−
2
0
0
5
]
\begin{bmatrix} 1&2&1\\ 3&8&1\\ 0&4&1\\ \end{bmatrix} => \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&4&1\\ \end{bmatrix} => \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&0&5\\ \end{bmatrix}
⎣⎡130284111⎦⎤=>⎣⎡1002241−21⎦⎤=>⎣⎡1002201−25⎦⎤
此时我们认定a[3,3]位第三个主元(3rd Pivot)。
可以看到到消元后的矩阵以三个主元为对角线(1st, 2nd, 3rd),左下角的元素全为0,这样的矩阵成为上三角矩阵(Upper triangular),我们说这样的系数矩阵A是个好矩阵,我们可以通过回代求出原方程组的解。注意:主元不能为0。
但是消元法一直都有效吗?如果A中的元素a[2,2]=6,我们对这样的矩阵进行消元,会得到如下结果:
[
1
2
1
3
6
1
0
4
1
]
=
>
[
1
2
1
0
0
−
2
0
4
1
]
\begin{bmatrix} 1&2&1\\ 3&6&1\\ 0&4&1\\ \end{bmatrix} => \begin{bmatrix} 1&2&1\\ 0&0&-2\\ 0&4&1\\ \end{bmatrix}
⎣⎡130264111⎦⎤=>⎣⎡1002041−21⎦⎤
这时,我们可以通过行变换,将第二行和第三行交换位置然后继续进行消元。
但如果,我们第三行的元素全为0,我们该如何进行消元?例如
[
1
2
1
0
2
−
2
0
0
0
]
\begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&0&0\\ \end{bmatrix}
⎣⎡1002201−20⎦⎤
如果碰到这种情况,消元将彻底失效,这时我们成该矩阵不可逆,以后将会讲到相关知识。
总结一下消元失效:
行交换可以解决主元为0的“暂时性”失效;
但当底下的行中再也没有非0元素时,消元彻底失效,且该矩阵不可逆。
因此我们现在只关注好的情况。回到正题,我们对系数矩阵A进行消元后得到矩阵U:
U
=
[
1
2
1
0
2
−
2
0
0
5
]
U= \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&0&5\\ \end{bmatrix}
U=⎣⎡1002201−25⎦⎤
回代(Back substitution)
我们已经知道系数矩阵A是个好矩阵,接下来我们将加上目标矩阵b,同时对目标矩阵进行消元,Ab如下:
A
b
=
[
1
2
1
2
3
8
1
12
0
4
1
2
]
Ab= \begin{bmatrix} 1&2&1&2\\ 3&8&1&12\\ 0&4&1&2\\ \end{bmatrix}
Ab=⎣⎡1302841112122⎦⎤
我们称这样的矩阵叫做增广矩阵(Augmented Matrix),因为它在A的右侧增加了一列。
同样,我们对增广矩阵Ab进行跟消元时相同的操作,只是这一次我们带上b一起玩。
[
1
2
1
2
3
8
1
12
0
4
1
2
]
=
>
[
1
2
1
2
0
2
−
2
6
0
4
1
2
]
=
>
[
1
2
1
2
0
2
−
2
6
0
0
5
−
10
]
\begin{bmatrix} 1&2&1&2\\ 3&8&1&12\\ 0&4&1&2\\ \end{bmatrix} => \begin{bmatrix} 1&2&1&2\\ 0&2&-2&6\\ 0&4&1&2\\ \end{bmatrix} => \begin{bmatrix} 1&2&1&2\\ 0&2&-2&6\\ 0&0&5&-10\\ \end{bmatrix}
⎣⎡1302841112122⎦⎤=>⎣⎡1002241−21262⎦⎤=>⎣⎡1002201−2526−10⎦⎤
可以看到b经过一系列变换之后变成了c:
c
=
[
2
6
−
10
]
c= \begin{bmatrix} 2\\ 6\\ -10\\ \end{bmatrix}
c=⎣⎡26−10⎦⎤
到这里,可以看出矩阵消元的过程实际上就是:
A
x
=
b
U
x
=
c
A
=
>
U
b
=
>
c
Ax=b\\ Ux=c\\ A=>U\quad b=>c\\
Ax=bUx=cA=>Ub=>c
Ax=b变换到Ux=c的过程。
我们将Ux=c代回到原方程组即可得到:
{
x
+
2
y
+
z
=
2
2
y
−
2
z
=
6
5
z
=
−
10
\begin{cases} x&+&2y&+&z&=&2\\ &&2y&-&2z&=&6\\ &&&&5z&=&-10\\ \end{cases}
⎩⎪⎨⎪⎧x+2y2y+−z2z5z===26−10
解为:
{
x
=
2
y
=
1
z
=
−
2
\begin{cases} x=2\\ y=1\\ z=-2\\ \end{cases}
⎩⎪⎨⎪⎧x=2y=1z=−2
以上就是消元的基本流程。
矩阵变换(Matrix Operation)
细心的同学可能会注意到,在描述矩阵消元的过程中我对矩阵的变换过程使用的是自然语言(即文字)去描述的,但是,相比较于自然语言,我们能不能够使用矩阵去描述他的变换过程呢?这就是我们接下来要接触到的矩阵变换。
让我们回到消元第一步:
[
1
2
1
3
8
1
0
4
1
]
=
>
[
1
2
1
0
2
−
2
0
4
1
]
\begin{bmatrix} 1&2&1\\ 3&8&1\\ 0&4&1\\ \end{bmatrix} => \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&4&1\\ \end{bmatrix}
⎣⎡130284111⎦⎤=>⎣⎡1002241−21⎦⎤
思考一下,用怎样的矩阵去乘A能够得到第一次消元后的矩阵?
[
?
?
?
?
?
?
?
?
?
]
[
1
2
1
3
8
1
0
4
1
]
=
>
[
1
2
1
0
2
−
2
0
4
1
]
\begin{bmatrix} ?&?&?\\ ?&?&?\\ ?&?&?\\ \end{bmatrix} \begin{bmatrix} 1&2&1\\ 3&8&1\\ 0&4&1\\ \end{bmatrix} => \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&4&1\\ \end{bmatrix}
⎣⎡?????????⎦⎤⎣⎡130284111⎦⎤=>⎣⎡1002241−21⎦⎤
请记住,在进行矩阵乘法的时候,我们要用整个向量去进行思考。
先给出矩阵乘法的定义,其实上一节末尾我们也有提到过一点。
1、m行n列的矩阵A跟n行w列的矩阵B相乘,结果矩阵C为m行w列,注意矩阵A的列数和矩阵B的行数要相同,两矩阵才可进行乘法运算。
2、矩阵A第一行和矩阵B第一列点积的结果为矩阵C的第一行第一列元素的值;
矩阵A第一行和矩阵B第二列点积的结果为矩阵C的第一行第二列元素的值…如此类推。
数学公式:
c
i
j
=
∑
k
=
0
n
a
i
k
∗
b
k
j
c_{ij} = \sum_{k=0}^n\ a_{ik}*b_{kj}
cij=k=0∑n aik∗bkj
回到正题,首先,给该变换矩阵赋个名字:
E
21
E_{21}
E21这表示为对矩阵A的a[2,1]元素进行消元的变换矩阵。
继续,第一次消元我们要改变的是第二行的元素,因此第一行和第三行保持不变:
[
1
0
0
?
?
?
0
0
1
]
[
1
2
1
3
8
1
0
4
1
]
=
>
[
1
2
1
0
2
−
2
0
4
1
]
\begin{bmatrix} 1&0&0\\ ?&?&?\\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} 1&2&1\\ 3&8&1\\ 0&4&1\\ \end{bmatrix} => \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&4&1\\ \end{bmatrix}
⎣⎡1?00?00?1⎦⎤⎣⎡130284111⎦⎤=>⎣⎡1002241−21⎦⎤
然后,思考一下变换矩阵的第二行应该填怎样的值?
消元时,我们借助第一行的值来消去第二行,第三行不受影响,因此我们可以考虑到待填充的第三个元素为0,第二个元素为1。(记住,请用向量来思考矩阵乘法的过程)最后,第一个元素我们填-3,得到下图:
[
1
0
0
−
3
1
0
0
0
1
]
[
1
2
1
3
8
1
0
4
1
]
=
>
[
1
2
1
0
2
−
2
0
4
1
]
\begin{bmatrix} 1&0&0\\ -3&1&0\\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} 1&2&1\\ 3&8&1\\ 0&4&1\\ \end{bmatrix} => \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&4&1\\ \end{bmatrix}
⎣⎡1−30010001⎦⎤⎣⎡130284111⎦⎤=>⎣⎡1002241−21⎦⎤
进一步解析:
[
1
0
0
]
\begin{bmatrix}1&0&0\end{bmatrix}
[100]为对矩阵A第一行乘1,第二行乘0,第三行乘0;
[
0
0
1
]
\begin{bmatrix}0&0&1\end{bmatrix}
[001]为对矩阵A第一行乘0,第二行乘0,第三行乘1。因此对于消去矩阵A第二行,我们需要让矩阵A第一行乘-3,第二行保留为1倍,因为不对第三行执行操作所以置其倍数为0。
变换矩阵:
E
21
=
[
1
0
0
−
3
1
0
0
0
1
]
E_{21}= \begin{bmatrix} 1&0&0\\ -3&1&0\\ 0&0&1\\ \end{bmatrix}
E21=⎣⎡1−30010001⎦⎤
不确定的同学可以动手计算一下结果是否正确。
我们可以观察到这个变换矩阵看起来有点特殊,如果我们把-3换成0的话:
[
1
0
0
0
1
0
0
0
1
]
\begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&0&1\\ \end{bmatrix}
⎣⎡100010001⎦⎤
这样的矩阵我们称之为单位矩阵,对角线上的元素全为1。任意矩阵乘以相对应的单位矩阵结果是它本身,单位矩阵的性质跟1和相似,可以理解为它就是矩阵里的“1”。
接下来我们思考消元的第二步,第二步中的变换矩阵我们又该填怎样的值呢?
延续上一步的思路,这次我们需要消掉a[3,2],因此第一行和第二行不变。
[
1
0
0
0
1
0
?
?
?
]
[
1
2
1
0
2
−
2
0
4
1
]
=
[
1
2
1
0
2
−
2
0
0
5
]
\begin{bmatrix} 1&0&0\\ 0&1&0\\ ?&?&?\\ \end{bmatrix} \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&4&1\\ \end{bmatrix} = \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&0&5\\ \end{bmatrix}
⎣⎡10?01?00?⎦⎤⎣⎡1002241−21⎦⎤=⎣⎡1002201−25⎦⎤
然后,我们借助第二行来进行消元。
[
1
0
0
0
1
0
0
−
2
1
]
[
1
2
1
0
2
−
2
0
4
1
]
=
[
1
2
1
0
2
−
2
0
0
5
]
\begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&-2&1\\ \end{bmatrix} \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&4&1\\ \end{bmatrix}= \begin{bmatrix} 1&2&1\\ 0&2&-2\\ 0&0&5\\ \end{bmatrix}
⎣⎡10001−2001⎦⎤⎣⎡1002241−21⎦⎤=⎣⎡1002201−25⎦⎤
变换矩阵:
E
32
=
[
1
0
0
0
1
0
0
−
2
1
]
E_{32}= \begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&-2&1\\ \end{bmatrix}
E32=⎣⎡10001−2001⎦⎤
至此,我们可以得到一个新的等式:
E
32
(
E
21
A
)
=
U
E_{32}(E_{21}A)=U
E32(E21A)=U
这里我们阐述几个矩阵乘法的特性:
1、矩阵乘法支持结合律(Associative Law)
即
E
32
(
E
21
A
)
=
U
E_{32}(E_{21}A)=U
E32(E21A)=U
等价于
(
E
32
E
21
)
A
=
U
(E_{32}E_{21})A=U
(E32E21)A=U
2、矩阵乘法不满足交换律(Commutative Law)
即AxB不等于BxA
A
B
≠
B
A
AB \neq BA
AB̸=BA
思考一个问题,我们能否使用1个变换矩阵来表示整个变换过程,即我只用1个变换矩阵就能对系数矩阵A完成整个消元过程?
相信看到性质1的同学都会有点小想法,不过我们可以使用逆变换矩阵,所谓逆变换矩阵就是把变换过程逆转过来,生成让矩阵U转换回A的矩阵,这说明E21的逆矩阵与E21相乘的结果为单位矩阵。
比如说对于变换矩阵E21来说他的逆矩阵应该是怎样的?
[
?
?
?
?
?
?
?
?
?
]
[
1
0
0
−
3
1
0
0
0
1
]
=
[
1
0
0
0
1
0
0
0
1
]
\begin{bmatrix} ?&?&?\\ ?&?&?\\ ?&?&?\\ \end{bmatrix} \begin{bmatrix} 1&0&0\\ -3&1&0\\ 0&0&1\\ \end{bmatrix}= \begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&0&1\\ \end{bmatrix}
⎣⎡?????????⎦⎤⎣⎡1−30010001⎦⎤=⎣⎡100010001⎦⎤
运用变换矩阵的计算思路,我们可以得到:
[
1
0
0
3
1
0
0
0
1
]
[
1
0
0
−
3
1
0
0
0
1
]
=
[
1
0
0
0
1
0
0
0
1
]
\begin{bmatrix} 1&0&0\\ 3&1&0\\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} 1&0&0\\ -3&1&0\\ 0&0&1\\ \end{bmatrix}= \begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&0&1\\ \end{bmatrix}
⎣⎡130010001⎦⎤⎣⎡1−30010001⎦⎤=⎣⎡100010001⎦⎤
E21的逆矩阵:
E
21
−
1
=
[
1
0
0
3
1
0
0
0
1
]
E_{21}^{-1}= \begin{bmatrix} 1&0&0\\ 3&1&0\\ 0&0&1\\ \end{bmatrix}
E21−1=⎣⎡130010001⎦⎤
关于逆矩阵更详细的知识将会在后面的章节讲到。
最后我们玩点有趣的吧~
给出定义
A
=
[
a
b
c
d
]
B
=
[
c
d
a
b
]
A= \begin{bmatrix} a&b\\ c&d\\ \end{bmatrix} \quad B= \begin{bmatrix} c&d\\ a&b\\ \end{bmatrix}
A=[acbd]B=[cadb]
思考一下,将A转换到B的变换矩阵T是什么?
=思考线===========
t
A
=
B
[
0
1
1
0
]
[
a
b
c
d
]
=
[
c
d
a
b
]
t
=
[
0
1
1
0
]
tA=B\\ \begin{bmatrix} 0&1\\ 1&0\\ \end{bmatrix} \begin{bmatrix} a&b\\ c&d\\ \end{bmatrix} = \begin{bmatrix} c&d\\ a&b\\ \end{bmatrix} \\ t= \begin{bmatrix} 0&1\\ 1&0\\ \end{bmatrix}
tA=B[0110][acbd]=[cadb]t=[0110]
我们称t这样的矩阵为置换矩阵(Permutation Matrix)。
再思考一下:
怎样的置换矩阵w能够实现下面的变换?建议自己思考一下再往下阅读~
A
=
>
C
[
a
b
c
d
]
=
>
[
b
a
d
c
]
A=>C\\ \begin{bmatrix} a&b\\ c&d\\ \end{bmatrix}=> \begin{bmatrix} b&a\\ d&c\\ \end{bmatrix}
A=>C[acbd]=>[bdac]
=思考线===========
结果如下:
A
w
=
C
[
a
b
c
d
]
[
0
1
1
0
]
=
[
b
a
d
c
]
w
=
[
0
1
1
0
]
Aw=C\\ \begin{bmatrix} a&b\\ c&d\\ \end{bmatrix} \begin{bmatrix} 0&1\\ 1&0\\ \end{bmatrix}= \begin{bmatrix} b&a\\ d&c\\ \end{bmatrix} \\ w= \begin{bmatrix} 0&1\\ 1&0\\ \end{bmatrix}
Aw=C[acbd][0110]=[bdac]w=[0110]
hh,如果你有真正思考过你会觉得这个问题很有趣,虽然我们在本节中讲到的都是行变换,担请不要忘记列变换,虽然我们现在只关注行变换。
记住:
当进行行变换的时候使用左乘;
当进行列变换的时候使用右乘。
下一节将讲解乘法和逆矩阵