学习资源:
- 麻省理工公开课:线性代数【讲师: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,如果你有真正思考过你会觉得这个问题很有趣,虽然我们在本节中讲到的都是行变换,担请不要忘记列变换,虽然我们现在只关注行变换。
记住:
当进行行变换的时候使用左乘;
当进行列变换的时候使用右乘。
下一节将讲解乘法和逆矩阵