矩陣消元 elimination

海豹熘鱼片發表於2024-11-24

矩陣消元 elimination

​ 我們考慮一個方程組:

\[\left\{\begin{matrix} x&+2y&+z&=&2 \\ 3x&+8y&+z&=&12 \\ &4y&+z&=&2 \end{matrix}\right. \]

同之前一樣,考慮\(A\symbfit x = b\)形式,得到:

\[A=\begin{bmatrix} 1 & 2 & 1\\ 3 & 8 & 1 \\ 0 & 4 & 1 \end{bmatrix} \]

在中學階段,我們求解方程組一般用消元法,那麼下面我們嘗試利用消元法求解線性方程組,並看看矩陣是如何變化的。

​ 首先,我們考慮消掉第二行第一列的元素“3”,記為(2,1)。這將用到(1,1),稱它為第一個主元(1st. pivot)。可以做這樣的處理:對第二行做第二行減去3倍第一行(簡記為 row2 - 3*row1),其他行不變。係數矩陣將變為:

\[\begin{bmatrix} 1 & 2 & 1\\ 0 & 2 & -2 \\ 0 & 4 & 1 \end{bmatrix} \]

​ 然後,再以(2,2)為主元(2nd. pivot),對 row3 做 row3 - 2*row2 的處理,其他行不變。係數矩陣將變為:

\[\begin{bmatrix} \boxed 1 & 2 & 1\\ 0 & \boxed 2 & -2 \\ 0 & 0 & \boxed 5 \end{bmatrix} \]

圖中畫框的即為主元。注意:主元不能為0!。我們試想一下,倘若主元為0,那麼我們是不是就無法求得相應未知數的值了?因為它將無法用給出的方程組的方程的線性組合得到它和其他未知數或常數的關係,或者說,此時它可以取任意值。


​ 那麼,倘若我們用消元法的過程中發現主元為0了的話,有沒有什麼“救濟措施”?答案是有的,我們可以試著交換行。例如下面的矩陣:

\[\begin{bmatrix} 1 & 2 & 1\\ 0 & 0 & 1 \\ 0 & 4 & 1 \end{bmatrix} \]

這時,它的第二個主元為0了,我們可以將 row2 與 row3 交換:

\[\begin{bmatrix} 1 & 2 & 1\\ 0 & 4 & 1 \\ 0 & 0 & 1 \end{bmatrix} \]

便可以進行後面的操作了。

​ 但是,我們不得不還要考慮另一個問題,假如後一行相應的元素也為0呢?如:

\[\begin{bmatrix} 1 & 2 & 1\\ 0 & 0 & 1 \\ 0 & 0 & 0 \end{bmatrix} \]

這時,我們無論怎樣處理,都不會得到未知數y的確切值了。這時消元法失效了,這種矩陣稱為不可逆的(在後面會詳細講)。


​ 回到正題,下面我們還是考慮消元法可以使用的情況。既然我們得到了消元之後的矩陣,但是這都是沒有考慮到\(b\)的情況,事實上,我們對方程組的方程線性操作(矩陣的行的處理)的時候,等式右邊的數也會相應地改變。

​ 下面我們考慮回代(back substitution)。還是對應上個例子,我們將\(A\)\(b\)寫在一塊:

\[\left[\begin{array}{ccc|c} 1 & 2 & 1 & 2\\ 3 & 8 & 1 & 12\\ 0 & 4 & 1 & 2 \end{array} \right] \]

其中豎線左邊的是\(A\),右邊的是\(b\)。稱這種矩陣為增廣矩陣(augmented matrix)。它最終會變成如下矩陣:

\[\begin{bmatrix} 1 & 2 & 1 & 2\\ 0 & 2 & -2 & 6\\ 0 & 0 & 5 & -10 \end{bmatrix} \]

左邊的\(A\)變換之後記為\(U\),右邊的\(b\)變換之後記為\(c\)。現在將該矩陣對應的線性方程組寫出來:

\[\left\{\begin{matrix} 2x&-y&+z&=&2 \\ &2y&-2z&=&6 \\ &&5z&=&-10 \end{matrix}\right. \]

從下到上依次求解,不難解出\(x=2,y=1,z=-2\)

​ 下面我們考慮如何用矩陣語言詮釋這整個消元過程。


​ 不過在那之前,我們補充一下矩陣乘法。在上一篇文章的最後,我們提到了矩陣右乘列向量的計算方法。下面我們說一下矩陣左乘行向量的計算。

​ 在之前,我們說矩陣右乘列向量是矩陣各列的線性組合,如:

\[\begin{bmatrix} 2 & 5\\ 1 & 3 \end{bmatrix} \begin{bmatrix} 1\\ 2 \end{bmatrix} = 1\begin{bmatrix} 2\\ 1 \end{bmatrix} + 2\begin{bmatrix} 5\\ 3 \end{bmatrix} =\begin{bmatrix} 12\\ 7 \end{bmatrix} \]

這是上一節舉的例子。實際上,矩陣左乘行向量與之類似,我們也可以理解為矩陣各行的線性組合。如:

\[\begin{bmatrix} 1 & 2 & 7 \end{bmatrix} \begin{bmatrix} 1 & 2 & 1 \\ 3 & 8 & 1 \\ 0 & 4 & 1 \\ \end{bmatrix} = 1\begin{bmatrix} 1 & 2 & 1 \end{bmatrix} + 2\begin{bmatrix} 3 & 8 & 1 \end{bmatrix} +7\begin{bmatrix} 0 & 4 & 1 \end{bmatrix} = \begin{bmatrix} 7 & 46 & 10 \end{bmatrix} \]


​ 說明完之後,迴歸正題,考慮如何用矩陣語言詮釋這整個消元過程。

​ 首先對於矩陣\(\begin{bmatrix} 1 & 2 & 1\\ 3 & 8 & 1 \\ 0 & 4 & 1 \end{bmatrix}\),我們的第一步是需要實現 row2 - 3*row1,其他行不變,需要什麼矩陣去實現?也就是說:(由於是行的組合,暫且把“?”放在矩陣左邊)

\[?\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} \]

考慮一下剛才說的,我們可以嘗試一下:既然要第一行不變,那我們是不是就可以理解為矩陣各行的線性組合,其中 row1 係數為1,其他行係數為0,那麼需要的行向量是不是就是\(\begin{bmatrix}1&0&0\end{bmatrix}\)?同理,第三行需要的行向量即為\(\begin{bmatrix}0&0&1\end{bmatrix}\),而第二行比較特殊,是原矩陣 row2 - 3*row1,那麼行向量應該寫為\(\begin{bmatrix}-3&1&0\end{bmatrix}\)。把這些行向量按行的順序拼起來,得到

\[\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} \]

可以拿右邊的矩陣任意一個元素檢驗一下,是沒有問題的。實際上這很合理,因為所謂的矩陣,其本質還是線性方程組的係數,將得到的行向量按順序結合起來不正是將變換完(消元之後)的線性方程按順序結合在一起嗎?

​ 記剛才組合出的矩陣為初等矩陣(elementary matrix),記為\(E\),對於上式中的初等矩陣,記為\(E_{21}\)。若該初等矩陣為\(\begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}\),則稱為單位矩陣(identity matrix),將它右乘任一行為3的矩陣,則結果還是那個矩陣(這裡單位矩陣是以3行為例),各行的係數均不變,還是那個原來的矩陣。

​ 第二步,row3 - 2*row2,其他行不變。與剛才類似,我們可以得到

\[\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} \]

其中\(E_{32}=\begin{bmatrix}1 & 0 & 0\\ 0 & 1 & 0 \\ 0 & -2 & 1 \end{bmatrix}\)

​ 然後,考慮將這兩步整合,也就是說,嘗試用一個矩陣實現上述兩個步驟。結果是顯然的,我們注意到剛才的運算可以寫為這種形式:

\[E_{32}\left({E_{21}A}\right)=U \]

我們想找到一個矩陣,實現\(?A=U\),那麼顯然,這個“?”即為\(\left(E_{32}E_{21}\right)\)​。把括號的位置做了交換,這就是結合律(associative law)。


​ 下面說一下置換矩陣(permutation matrix),是另一種初等矩陣。

​ 我們首先看一下對矩陣的行交換。對於一個矩陣\(\begin{bmatrix}a & b\\c & d\end{bmatrix}\),想要將它的上下兩行做交換,那麼實際上可以讓它左乘一個矩陣:

\[\begin{bmatrix}0 & 1\\1 & 0\end{bmatrix} \begin{bmatrix}a & b\\c & d\end{bmatrix} = \begin{bmatrix}c & d\\a & b\end{bmatrix} \]

這種矩陣稱為置換矩陣,記為\(P\)。實際上,單位矩陣做行變換即得到該置換矩陣。

​ 那麼如果是列變換呢?我們可以讓原矩陣右乘一個矩陣,以實現效果:

\[\begin{bmatrix}a & b\\c & d\end{bmatrix} \begin{bmatrix}0 & 1\\1 & 0\end{bmatrix} = \begin{bmatrix}b & a\\d & c\end{bmatrix} \]

該置換矩陣的第一列可以理解為0col1 + 1col2,第二列是1col1+0col2。

​ 我們可以得出這樣一個規律,作列變換時矩陣右乘,作行變換時矩陣左乘。而且也可以得出,\(AB\neq BA\)​,即矩陣的乘法順序是不能變的,即矩陣乘法不滿足交換律。[1]

​ 最後再考慮這麼一件事,我們如何從\(U\)得到\(A\)?這實際上就是矩陣的逆變換(inverses)。比如,如果做了這樣的操作:row2 - 3row1,那麼將該運算逆過來,即:row2 + 3row1。即

\[\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} \]

關於逆變換的具體內容,下一篇文章將進行詳細說明。


  1. 關於這些結論的嚴格推導請參閱相關資料,我這裡只是為了直觀理解矩陣運算的本質。 ↩︎

相關文章