Evanalysis
2.3預計閱讀時間: 24 分鐘

2.3 高斯消元與最簡行階梯形

跟著一條完整的行化簡路徑,學會用 REF 與 RREF 讀方程組,而不是靠猜。

課程目錄

為甚麼要學消元

高斯消元把方程組改寫成一系列樞軸方程,讓我們能夠讀出它的解。每一階段先選定 樞軸,清掉它下方的元素,再處理餘下的行與欄。每一步都要保持解集不變,同時 讓下一個變量更容易分離出來。

本節先說明目標形狀,再走完一次計算:先區分 REF 與 RREF,然後用完整例子 觀察每個樞軸如何建立,以及最後的矩陣如何描述全部解。

目標:樞軸形成階梯

我們想得到的,不只是「比較簡單的矩陣」,而是方便讀出結構的矩 陣。

實際上,這表示你要不斷做以下事情:

  1. 選一個主元,
  2. 把它下面的元素清掉,
  3. 轉到右下角較小的子矩陣,
  4. 如果想要最易讀的形式,再把主元上方的元素也清掉。

所以,消元其實是在一步一步建立一條主元階梯。

定義

REF 與 RREF

矩陣屬於 行階梯形(REF),表示:

  1. 全 0 行都放在最下面;
  2. 每一個非零行的第一個非零元素,都比上一行的第一個非零元素更靠 右。

矩陣屬於 最簡行階梯形(RREF),則還要再滿足:

  1. 每個主元都等於 11;
  2. 每個主元所在的欄,除了那個主元之外,其餘位置全部都是 00。

每一個非零行最左邊的第一個非零元素,叫做 主元。含有主元的欄, 叫做 主元欄。當增廣系統一致時,沒有主元的係數欄才對應 自由變量;常數欄不對應未知量。

這些詞彙很重要,因為之後你判斷「唯一解 / 無限多解 / 無解」時,就 是靠它們。

定理

為甚麼行化簡是安全的?

如果兩個增廣矩陣是行等價的,那麼它們代表的是等價方程組,也就是說 它們有相同的解集。

所以,行化簡不是在改題目,而是在重新排列同一題的資訊。

兩個問題:合法的路徑與有用的終點

概念視角算法

高斯消元是在行等價類中選擇一條算法路徑

行等價回答哪些改變合法,高斯消元回答怎樣選擇這些改變,使有限的計算抵達容易讀懂的形式。兩個問題並不相同。不斷交換同一對行,每一步都保留解集,卻不會完成求解。一個有效算法既需要保持不變的對象,也需要能夠持續前進的指標。

這裡的不變量是增廣系統的解集。向下消元的進展則是主元逐行下移,並且嚴格向右移動。一旦某個主元下方已經清零,後續只對更低的行運算,就不會破壞那些零。局部化簡能夠逐步累積,而不是互相抵消,正是算法成立的關鍵。

更精確地說,先觀察尚未處理的行,尋找其中最靠左且含非零元素的一欄。必要時交換行,把可用元素移到未處理部分的第一行,作為主元,並清除它下方的元素。隨後轉到更低的行,只向右繼續尋找。如果某一欄在尚未處理的行中全為零,就跳過該欄,不必嘗試除以零,也不必硬造一個主元。

“最靠左”這一要求有證明上的作用:新的主元出現以前,所有尚未處理的行在更左位置都是零。對這些行取線性組合,仍然保持這個零前綴。因此,新行的首個非零元素不會跑到先前主元的左邊。階梯條件是算法逐步建立的不變量,而不是算完之後碰巧成立的外觀。

如果尚未處理的行全部為零,向下消元立即結束。否則,每選一個主元都會佔用新的一行和新的一欄。行數與欄數有限,所以步驟必然終止。這個論證說明階梯形總能構造出來,而不依賴某個特別簡單的數值例子;但它尚未證明階梯形唯一。不同的合法選擇仍可產生不同的主元數值和主元上方元素。

向上清除為何不會破壞已經完成的欄

從 REF 開始,先把每個非零主元縮放為一,再從最後一個主元行向上處理。要清除某個主元上方的元素,就減去主元行的適當倍數。主元行在首個非零元素以前全為零,因此不會改變更早的主元欄;它右側已經清理完的主元欄,在當前行中也都是零,所以同樣不會被破壞。

這樣,每完成一欄,該欄便只有主元位置的 11 非零。逐步向上處理,最後所有主元欄都滿足這個條件,便得到 RREF。這個證明也說明,按確定次序清除通常比到處任意代換更容易檢查。

僅要求 REF 時,不必把主元變成一:二或負三都可以作為首個非零元素。要求 RREF 時,主元必須為一,這是定義中的額外條件。一致的階梯系統已經可以用回代求解;繼續化成最簡行階梯形,是為了直接展示所有主變量如何依賴參數。

算法的存在性和最終簡化結果的唯一性是兩個不同定理。消元過程證明至少能達到某個 RREF;唯一性定理說明,從同一矩陣出發,不同合法路徑若都完成了 RREF,所得矩陣必定相同。因此,中間步驟不同並不表示出錯,但兩個不同的最終 RREF 不能同時正確。後面的專節會給出唯一性證明。

走一次完整的消元路徑

消元法的核心做法,是由增廣矩陣開始, 然後反覆利用主元去清掉它下面的元素。現在我們沿着這個思路看一個 小例子:

x+2y+2z=4,x+3y+3z=5,2x+6y+5z=6.\begin{aligned} x + 2y + 2z &= 4, \\ x + 3y + 3z &= 5, \\ 2x + 6y + 5z &= 6. \end{aligned}

它的增廣矩陣是

[122413352656].\begin{bmatrix} 1 & 2 & 2 & 4 \\ 1 & 3 & 3 & 5 \\ 2 & 6 & 5 & 6 \end{bmatrix}.

例題

把每個行變換都讀成一個目的

左上角的 11 已經是一個很方便的主元,所以第一個目標很清楚:

把這個主元下面的元素全部變成 00。

做

R2←R2−R1,R3←R3−2R1.R_2 \leftarrow R_2 - R_1, \qquad R_3 \leftarrow R_3 - 2R_1.

就得到

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

現在第 1 欄已經完成。下一個主元在第 2 行第 2 欄,所以用它清掉下面 的 22:

R3←R3−2R2.R_3 \leftarrow R_3 - 2R_2.

矩陣變成

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

到這一步,其實已經是 REF,可以用回代法解題。不過,如果你想得到最 方便直接閱讀的形式,就繼續做成 RREF。

先把最後一個主元改成 11:

R3←−R3⇒[122401110014].R_3 \leftarrow -R_3 \quad\Rightarrow\quad \begin{bmatrix} 1 & 2 & 2 & 4 \\ 0 & 1 & 1 & 1 \\ 0 & 0 & 1 & 4 \end{bmatrix}.

然後清掉這個主元上方的元素:

R1←R1−2R3,R2←R2−R3,R_1 \leftarrow R_1 - 2R_3, \qquad R_2 \leftarrow R_2 - R_3,

得到

[120−4010−30014].\begin{bmatrix} 1 & 2 & 0 & -4 \\ 0 & 1 & 0 & -3 \\ 0 & 0 & 1 & 4 \end{bmatrix}.

最後,再把第二個主元上方的 22 清掉:

R1←R1−2R2,R_1 \leftarrow R_1 - 2R_2,

就得到 RREF

[1002010−30014].\begin{bmatrix} 1 & 0 & 0 & 2 \\ 0 & 1 & 0 & -3 \\ 0 & 0 & 1 & 4 \end{bmatrix}.

這時解可以直接讀出:

x=2,y=−3,z=4.x = 2,\qquad y = -3,\qquad z = 4.

這個例子要你記住的,不是孤立的步驟,而是以下節奏:

  • 清主元下面的元素,建立 REF;
  • 清主元上面的元素,建立 RREF;
  • 到了 RREF,就可以直接讀解。

看主元階梯如何形成

下面的圖解序列沿用同一個例子。你可以把它當成正式行變換與互動步驟器 之間的橋:每一格都先固定一個數學目的,然後才進入下一步計算。

由主元階梯到 RREF

把同一個消元例子看成一段短圖解:選主元、清元素,最後從 RREF 讀出已解方程組。

  1. 由增廣矩陣開始

    第一列在第 1 行已有方便的主元。眼前目標是把這個主元下方的元素全部變成 0。

  2. 建立主元階梯

    第一次清下方元素之後,下一個主元出現在第 2 行第 2 列。再清它下方的元素,就得到列階梯形。

  3. 標準化最後主元

    最後一個非零行的 leading entry 是 -1。把整行乘以 -1,主元變成 1,但解集不變。

  4. 清主元上方

    只有當每個主元都是所在列唯一的非零元素時,才到達 RREF;因此後半段運算會向上清除。

  5. 讀出已解變數

    當左邊變成單位矩陣,右邊一列就可以直接讀成 x = 2、y = -3、z = 4。

這個計算唔係一堆互不相干的行變換,而係有控制地改變形狀:先清主元下方得到 REF,再標準化主元並清主元上方得到 RREF。

用互動步驟器再走一次

下面的步驟器保留同一條消元路徑,但刻意放慢節奏。每到一步,都請你 同時觀察:

  1. 正在處理哪一個主元;
  2. 正在做哪一個行變換;
  3. 做完之後,哪一部分變得更容易讀。

邊讀邊試

跟著走完一條行化簡路徑

互動步驟器會帶你走完一條完整的消元路徑,逐步顯示行變換、正在處理的主元,以及每一步得到的矩陣。

1224
1335
2656

行變換

先在第 1 列選主元。

要留意甚麼

第 1 列的第一行已經有方便的主元 1,所以暫時不用換行。

先由增廣矩陣開始。第一個主元的工作,是幫我們把它下面的元素清掉。

在較大的方程組中追蹤樞軸

在較大的方程組中,同一套樞軸策略需要貫穿多步計算。每一步開始前, 指出正在清除哪一欄、使用哪個樞軸;完成後,再檢查先前樞軸欄的結構 是否保留。

考慮增廣矩陣

C=[120102112101232411251510324118].C= \begin{bmatrix} 1 & 2 & 0 & 1 & 0 & 2 & 1 \\ 1 & 2 & 1 & 0 & 1 & 2 & 3 \\ 2 & 4 & 1 & 1 & 2 & 5 & 1 \\ 5 & 10 & 3 & 2 & 4 & 11 & 8 \end{bmatrix}.

第一欄已有可用主元。先清掉它下方的元素,得到

[1201021001−1102001−121−1003−3413].\begin{bmatrix} 1 & 2 & 0 & 1 & 0 & 2 & 1 \\ 0 & 0 & 1 & -1 & 1 & 0 & 2 \\ 0 & 0 & 1 & -1 & 2 & 1 & -1 \\ 0 & 0 & 3 & -3 & 4 & 1 & 3 \end{bmatrix}.

現在第 2 行提供下一個主元。用它清掉下面相同方向的元素:

R3←R3−R2,R4←R4−3R2.R_3\leftarrow R_3-R_2, \qquad R_4\leftarrow R_4-3R_2.

再把之後出現的重複行清掉後,一個清楚的階梯階段是

[1201021001−1102000011−30000000].\begin{bmatrix} 1 & 2 & 0 & 1 & 0 & 2 & 1 \\ 0 & 0 & 1 & -1 & 1 & 0 & 2 \\ 0 & 0 & 0 & 0 & 1 & 1 & -3 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}.

這裡要暫停閱讀結構:主元欄是第 11、33、55 欄;自由欄是第 22、44、66 欄。要到 RREF,只需清掉第 55 欄主元上方的元素:

R2←R2−R3.R_2\leftarrow R_2-R_3.

最後的最簡形是

C′=[1201021001−10−15000011−30000000].C'= \begin{bmatrix} 1 & 2 & 0 & 1 & 0 & 2 & 1 \\ 0 & 0 & 1 & -1 & 0 & -1 & 5 \\ 0 & 0 & 0 & 0 & 1 & 1 & -3 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}.

令

x2=u,x4=v,x6=w.x_2=u,\qquad x_4=v,\qquad x_6=w.

三條主元方程讀成

x1+2x2+x4+2x6=1,x3−x4−x6=5,x5+x6=−3.\begin{aligned} x_1+2x_2+x_4+2x_6 &= 1,\\ x_3-x_4-x_6 &= 5,\\ x_5+x_6 &= -3. \end{aligned}

所以所有解可以寫成

x=[1050−30]+u[−210000]+v[−101100]+w[−2010−11].x= \begin{bmatrix} 1\\0\\5\\0\\-3\\0 \end{bmatrix} +u \begin{bmatrix} -2\\1\\0\\0\\0\\0 \end{bmatrix} +v \begin{bmatrix} -1\\0\\1\\1\\0\\0 \end{bmatrix} +w \begin{bmatrix} -2\\0\\1\\0\\-1\\1 \end{bmatrix}.

這個例子說明,長消元的目的不只是製造 0,而是暴露主元與自由變量的 結構,然後由這個結構寫出完整解集。

怎樣讀一個 RREF 矩陣

當矩陣已經在 RREF 時,最重要的閱讀問題有三個:

  • 每個變量欄都有主元嗎?
  • 有沒有自由變量?
  • 有沒有矛盾行?

例題

先讀結構,再做計算

假設你最後得到

[103501−210000].\begin{bmatrix} 1 & 0 & 3 & 5 \\ 0 & 1 & -2 & 1 \\ 0 & 0 & 0 & 0 \end{bmatrix}.

這裡第 1、2 欄是主元欄,但第 3 欄不是,所以第三個變量是自由變量。

因此,這個系統不是唯一解。它會有無限多解,因為你可以先自由選 第三個變量,再回過頭求出另外兩個主元變量。

定理

矛盾行代表甚麼?

如果行化簡後出現

[0001],\begin{bmatrix} 0 & 0 & 0 & 1 \end{bmatrix},

它對應的方程就是 0=10 = 1。這是不可能成立的,所以原方程組不相容, 也就是無解。

例題

矩陣幾乎是 RREF 時

有時矩陣已經很接近 RREF,只差某個主元欄還未清乾淨。例如

[13012400110−1000013000000]\begin{bmatrix} 1 & 3 & 0 & 1 & 2 & 4 \\ 0 & 0 & 1 & 1 & 0 & -1 \\ 0 & 0 & 0 & 0 & 1 & 3 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}

還不是 RREF,因為第 55 欄的主元上方仍有一個 22。只要做

R1←R1−2R3R_1\leftarrow R_1-2R_3

就得到

[13010−200110−1000013000000].\begin{bmatrix} 1 & 3 & 0 & 1 & 0 & -2 \\ 0 & 0 & 1 & 1 & 0 & -1 \\ 0 & 0 & 0 & 0 & 1 & 3 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}.

現在各主元欄已經清乾淨,所以矩陣在 RREF。自由變量是 x2x_2 和 x4x_4;若令 x2=sx_2=s、x4=tx_4=t,則解為

x=[−20−103]+s[−31000]+t[−10−110].x= \begin{bmatrix} -2\\0\\-1\\0\\3 \end{bmatrix} +s \begin{bmatrix} -3\\1\\0\\0\\0 \end{bmatrix} +t \begin{bmatrix} -1\\0\\-1\\1\\0 \end{bmatrix}.

跳過一欄也是數學資訊

例題

第一欄為零,算法仍能正常結束

把最後一欄看作常數欄,考慮三個未知量的系統:

[02460033].\left[\begin{array}{ccc|c}0&2&4&6\\0&0&3&3\end{array}\right].

第一欄全零,因此主元從第二欄開始。分別把兩行的主元縮放成一,然後清除第二個主元上方的元素:

[01230011]→R1←R1−2R2[01010011].\left[\begin{array}{ccc|c}0&1&2&3\\0&0&1&1\end{array}\right] \xrightarrow{R_1\leftarrow R_1-2R_2} \left[\begin{array}{ccc|c}0&1&0&1\\0&0&1&1\end{array}\right].

結果給出 x2=1x_2=1、x3=1x_3=1,卻沒有限制 x1x_1。所以所有解為 (t,1,1)(t,1,1),其中 t∈Rt\in\mathbb R。代回原來的兩行,得到 2+4=62+4=6 和 3=33=3,都與參數無關。跳過第一欄並沒有遺漏方程或丟失條件,因為這個變量從一開始就沒有出現在任何方程中。

這個例子也說明主元不必在主對角線上。階梯形由每行首個非零元素的位置決定,並不要求第一行一定從第一欄開始。在較大的矩陣中,兩個相鄰主元之間也可以隔著多個非主元欄。

處理增廣矩陣時,變量欄和常數欄必須分清。最後一列出現主元,代表的是矛盾,而不是多了一個可求出的變量。因此要先檢查一致性,之後才能把非主元系數欄解釋為可任意指定的解坐標。非主元欄也不一定全零:其中的元素可以記錄自由變量怎樣影響多個主變量。

例如,前面結構例子中含有系數三和負二的欄雖然不是零欄,卻仍然沒有主元。相應變量可以自由選值,但主變量要隨之調整。“自由”是說它可以作為獨立選擇,不是說它對其他方程沒有影響。

不重算整題,也能分層檢查

檢查每個箭頭時,先核對目標位置是否按計劃改變,再核對整條受影響的行,特別是最後一欄。隨後檢查所宣稱的形式:REF 要滿足階梯條件並把全零行放在底部;RREF 還要有單位主元和乾淨的主元欄。兩類檢查針對不同錯誤。算術完全正確也可能尚未達到 RREF;外觀看起來正確的矩陣,也可能來自錯誤運算。

最後把參數表達式代回化簡後的方程。既然每一步都可逆,同一表達式也滿足原系統。把自由參數全設成零只能檢查一個特殊解;完整檢查要保留參數,並核對各參數的系數。否則,方向向量中的負號錯誤可能被一個恰好正確的特殊解掩蓋。

常見錯誤

常見錯誤

REF 不等於 RREF

很多人只要看到主元下面全是 00 就停手。那樣可能已經足夠做回代,但 還未到 RREF。RREF 要求主元所在的欄,其他位置也全部是 00。

常見錯誤

做操作時沒有明確目標

不要因為「好像要減一下」就隨便做行變換。每一步之前,先把目的說清 楚:

  • 你現在用的是哪個主元?
  • 你想消去哪個元素?
  • 為甚麼這一步是最自然的下一步?

這個習慣會令你的計算更穩定,也更容易檢查符號錯誤。

快速檢查

思考檢查

甚麼情況下應該先換行,再繼續消元?

想一想目前的主元位置。如果那個位置是 00,但同一欄更下面有非零元 素,會怎樣處理?

解答 · 答案

當目前的主元位置不能用,例如它是 00,但同一欄下面有非零元素時, 就應先換行,把可用的主元移上來,然後再繼續消元。

思考檢查

[0001]\left[\begin{array}{ccc|c}0&0&0&1\end{array}\right] 是一行無害的資料嗎?

先把它翻譯回一條方程,再決定答案。

解答 · 答案

不是。它代表 0=10 = 1,是矛盾,所以方程組不相容,亦即無解。

思考檢查

在上面的長消元例子中,為甚麼 x2x_2、x4x_4、x6x_6 是自由變量?

看最後的 RREF C′C'。哪些變量欄含有首 1?

解答 · 答案

首 1 位於第 11、33、55 欄。因此第 22、44、66 欄沒有主元, 所以 x2x_2、x4x_4、x6x_6 是自由變量。

練習

練習 1

由

[112323580112]\begin{bmatrix} 1 & 1 & 2 & 3 \\ 2 & 3 & 5 & 8 \\ 0 & 1 & 1 & 2 \end{bmatrix}

開始,如果你的目標是清掉第一個主元下面的元素,最自然的第一步行變 換是甚麼?

解答 · 練習 1 引導解答

第一個主元已經是第 1 行第 1 欄的 11。它下面的元素是 22,所以最自 然的做法是

R2←R2−2R1.R_2 \leftarrow R_2 - 2R_1.

這一步可以一次過把第 1 欄主元下方的元素清掉。

練習 2

考慮矩陣

[102401−130000].\left[\begin{array}{ccc|c} 1 & 0 & 2 & 4 \\ 0 & 1 & -1 & 3 \\ 0 & 0 & 0 & 0 \end{array}\right].

它代表的系統有唯一解、無限多解,還是無解?

解答 · 練習 2 引導解答

這裡沒有矛盾行,所以不是無解。但第 3 欄沒有主元,因此存在自由變 量。只要有自由變量,解就不是唯一,而是無限多解。

練習 3

由

[13012400110−1000013000000]\begin{bmatrix} 1 & 3 & 0 & 1 & 2 & 4 \\ 0 & 0 & 1 & 1 & 0 & -1 \\ 0 & 0 & 0 & 0 & 1 & 3 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}

開始,哪一個單一步行變換可以把它化成 RREF?

解答 · 練習 3 引導解答

第 55 欄的主元是第 3 行的 11。同一主元欄中唯一未清掉的非零元素, 是第 1 行的 22,所以應從第 1 行減去兩倍第 3 行:

R1←R1−2R3.R_1\leftarrow R_1-2R_3.

練習 4

對於 RREF

[1201021001−10−15000011−30000000],\left[\begin{array}{cccccc|c} 1 & 2 & 0 & 1 & 0 & 2 & 1 \\ 0 & 0 & 1 & -1 & 0 & -1 & 5 \\ 0 & 0 & 0 & 0 & 1 & 1 & -3 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{array}\right],

令 x2=ux_2=u、x4=vx_4=v、x6=wx_6=w。把 x1x_1、x3x_3、x5x_5 寫成 uu、 vv、ww 的式子。

解答 · 練習 4 引導解答

讀出三條非零行:

x1+2u+v+2w=1,x3−v−w=5,x5+w=−3.\begin{aligned} x_1+2u+v+2w &= 1,\\ x_3-v-w &= 5,\\ x_5+w &= -3. \end{aligned}

因此

x1=1−2u−v−2w,x3=5+v+w,x5=−3−w.x_1=1-2u-v-2w,\qquad x_3=5+v+w,\qquad x_5=-3-w.

先讀這一頁

這一頁直接建立在 2.2 增廣矩陣與行變換 之上。如果你對「為甚麼行變換不會改變解集」仍然覺得不穩,請先回去 重讀那一頁,再練這裡的長消元路徑。

練習

先自行作答,再檢查答案。你可以修改後重試。

載入中…

本單元重點詞彙