一、矩陣消元(高斯消元法)
在解方程組時我們經常用到消元法,通過對方程的倍乘、加減等操作可以得到所求方程的解。
既然方程組可以用消元法進行求解,那么方程組變成矩陣自然也可以使用消元法。
矩陣消元目的主要是通過行變換將矩陣對角線下方的數字都變成0,從而可以回代求線性方程組的解
我們用該方程組演示:
,拿出它的系數矩陣A:
,右側向量b:![]()
消元的過程是將A進行行變換得到上三角陣U,然后回代右側向量,最后求解
1.消元的知識准備:對左側系數矩陣消元(A->U)
我們保留矩陣的第一行,然后消去下方所有行的多余變量
先從x位置開始。
既然要消去x,那么我們只需要關心矩陣的第一列,如圖
。
在圖中我們可以看到,關鍵的位置是紅色標記的1(我們將這種位置的數字稱為“主元”,因為它是第一個出現的,所以叫它“主元一”),而我們的目的是將藍色標記的位置都變成0。
操作很簡單,第一行不變(因為它是主元行),第二行整體減去一倍的第一行,第三行不做變化(因為它本來就是0)。
於是我們得到了如下圖的矩陣
,可以看到,第一列的元素除了第一行都變成了0。
然后,我們處理y。
繼續觀察矩陣
如今,-3是新的主元(主元二),而我們要消去的是藍色位置的1。
操作依舊簡單,第一、二行都不變,將第三行減去-1/3倍的第二行。
然后得到這樣的一個矩陣
。(把主元標記一下
)
事實上對系數矩陣的消元到這里就結束了,我們得到了一個上三角矩陣(因為它只有上半部分的三角形里有數字),我們用U表示它。
順便一提,消元時主元不能為0,如果主元為0,可以將主元所在的行與它下面的主元位置非0的行進行交換(比如
變成
)。
再順便一提,行列式的值就是主元的乘積,所以該矩陣行列式得9
如果沒有可以進行交換的行,方程無解,這種情況以后再討論。
2.消元的第一步:對增廣矩陣消元([A b] -> [U b'])
在正常的對方程組的消元過程中,等號右邊的項與左邊進行相同的操作,在矩陣中也是一樣。
對於方程組
,我們得到了它的系數矩陣A:
,然后,我們把它的右側向量b:
放到A中,得到一個新矩陣:
我們管這個新矩陣叫做“增廣矩陣”,因為它是原矩陣增加一部分構成的,我們可以把它寫作[A b]。
對於增廣矩陣的每一行,我們作與上方系數矩陣消元相同的操作,從而得到U和經過行變換的b構成的增廣矩陣[U b']
注:正常的消元直接操作增廣矩陣即可,上面對系數矩陣單獨消元只是為了加深各位的理解。
3.消元的第二步:回代
經過上面的變換,增廣矩陣變成了這個樣子:
。
把它改寫成方程組
求解,得到x=-1/9,y=-4/9,z=7/9
二、用矩陣描述消元過程:E[A b]=[U b']
上方我們討論了如何進行矩陣消元,現在,讓我們換一種思考方式,用矩陣相乘來描述消元的過程。
(1)預備知識
之前我們曾討論過矩陣乘向量的問題,我們的結論是:矩陣乘向量的結果實際是矩陣列的線性組合。
但是,矩陣消元用到的都是矩陣的行,那么,矩陣的行之間是否也有相似的性質呢?按套路來講,如果沒有這種性質我就不會問這個問題了。
事實上,當一個向量乘一個矩陣時,得到的結果就是該矩陣行的線性組合。
比如
,其結果相當於1*[1 1] + 2*[1 -2] = [3 -3]。
這里加上一些略微超前的概念:在一個矩陣A的左邊乘一個矩陣(簡稱左乘),就是對A進行行變換,而在A右邊乘一個矩陣(簡稱右乘),就是對A進行列變換。
(2)用矩陣消元
我們依然用
這個方程進行演示,拿出它的系數矩陣A:
,右側向量b:![]()
我們想要得到一個矩陣E,它可以表示出我們消元的整個過程,也就是用E與A相乘便能直接得到U
還記得我們之前消元的步驟么?
1.首先,保持第一行不變,第二行整體減去一倍的第一行,第三行同樣不變。
即,我們需要拿出-1倍的第一行,然后將它和第二行進行線性組合(相加),然后其他行不變(注意,在矩陣消元時我們是用兩行相減,而“線性組合”是相加)。
按照需求,我們只需要在A的左邊乘上
(我們用E1表示這個矩陣)
為什么是這個矩陣?我們一行一行地看。
首先,A的第一行不變,因此我們需要拿出A的1個第一行,0個第二行,0個第三行(進行線性組合),於是1 0 0組成了E1的第一行。
然后,我們需要-1個A的第一行,1個第二行,0個第三行進行線性組合,所以 -1 1 0組成了E1的第二行。
第三行不變,因此需要0個第一行,0個第二行,1個第三行,所以E1的第三行是0 0 1
經過變換,我們得到了
。
2.然后,保持一、二行不變,將1/3個第二行與第三行進行線性組合
可以自己寫出需要左乘的矩陣嗎?嘗試着自己推導一下
你的結果是它嗎
?我們用E2來表示這個矩陣。
經過這次變換,我們得到了我們想要的矩陣U:
(U是一個上三角矩陣)。
現在,我們可以用一個不太完美的式子來表達消元的全過程了:
E2(E1A)=U
3.最后,合並消元步驟
我們想要的結果是類似於EA=U這樣的干凈整潔的式子,怎么做到呢?
在這里需要引入一條新的有關矩陣乘法的性質:矩陣乘法滿足結合律(但不滿足交換律)
換句話說,E2(E1A)=(E2E1)A。(但AB≠BA)
即E=(E2E1),我們管E叫做消元矩陣。
4.整體描述
用矩陣描述消元便是找到一個矩陣E(由每一步消元的消元矩陣相乘得到),使得EA=U,然后將其應用於增廣矩陣[A b]從而得到[U b'],完成消元。
后面還會介紹EA=U的變形
三、置換矩陣
我們可以用矩陣相乘來完成矩陣的行交換與列交換,而用到的矩陣便叫做置換矩陣
行交換
我們消元時通過左乘矩陣實現了行與行的線性組合,那么,如果想要將兩行進行交換,需要怎么做呢?
召喚個矩陣先:
假設我們想要這個矩陣的第一二行(得到
)
對於新矩陣的第一行,我們相當於拿出了0個原矩陣的第一行,1個原矩陣的第二行,0個原矩陣的第三行。
對於新矩陣的第二行,我們相當於拿出了1個原矩陣的第一行,0個原矩陣的第二行,0個原矩陣的第三行。
對於新矩陣的第三行,我們相當於拿出了0個原矩陣的第一行,0個原矩陣的第二行,1個原矩陣的第三行。
因此,我們只需在原矩陣的基礎上左乘一個
。(各行顏色不同是為了便於理解其構成方式,沒有其他特別含義)
我們管左乘的這個矩陣叫做置換矩陣,用P表示。
列交換
之前提到過,左乘即操作行,右乘即操作列
召喚一個矩陣:
想要交換這個矩陣的第一二列,得到
對於新矩陣的第一列,我們相當於拿出了0個原矩陣的第一列,1個原矩陣的第二列,0個原矩陣的第三列。
對於新矩陣的第二列,我們相當於拿出了1個原矩陣的第一列,0個原矩陣的第二列,0個原矩陣的第三列。
對於新矩陣的第三列,我們相當於拿出了0個原矩陣的第一列,0個原矩陣的第二列,1個原矩陣的第三列。
所以,只需要右乘
注意:這個矩陣雖然和上面交換行的置換矩陣長相相同,但性質與構成的方式卻完全不同(行交換的置換矩陣是一行一行構成的,而列交換的卻是一列一列構成的)
