為甚麼要學消元
高斯消元把方程組改寫成一系列樞軸方程,讓我們能夠讀出它的解。每一階段先選定
樞軸,清掉它下方的元素,再處理餘下的行與欄。每一步都要保持解集不變,同時
讓下一個變量更容易分離出來。
本節先說明目標形狀,再走完一次計算:先區分 REF 與 RREF,然後用完整例子
觀察每個樞軸如何建立,以及最後的矩陣如何描述全部解。
目標:樞軸形成階梯
我們想得到的,不只是「比較簡單的矩陣」,而是方便讀出結構的矩
陣。
實際上,這表示你要不斷做以下事情:
- 選一個主元,
- 把它下面的元素清掉,
- 轉到右下角較小的子矩陣,
- 如果想要最易讀的形式,再把主元上方的元素也清掉。
所以,消元其實是在一步一步建立一條主元階梯。
定義
REF 與 RREF
矩陣屬於 行階梯形(REF),表示:
- 全 0 行都放在最下面;
- 每一個非零行的第一個非零元素,都比上一行的第一個非零元素更靠
右。
矩陣屬於 最簡行階梯形(RREF),則還要再滿足:
- 每個主元都等於 1;
- 每個主元所在的欄,除了那個主元之外,其餘位置全部都是 0。
每一個非零行最左邊的第一個非零元素,叫做 主元。含有主元的欄,
叫做 主元欄。當增廣系統一致時,沒有主元的係數欄才對應 自由變量;常數欄不對應未知量。
這些詞彙很重要,因為之後你判斷「唯一解 / 無限多解 / 無解」時,就
是靠它們。
定理
為甚麼行化簡是安全的?
如果兩個增廣矩陣是行等價的,那麼它們代表的是等價方程組,也就是說
它們有相同的解集。
所以,行化簡不是在改題目,而是在重新排列同一題的資訊。
兩個問題:合法的路徑與有用的終點
概念視角算法
高斯消元是在行等價類中選擇一條算法路徑
行等價回答哪些改變合法,高斯消元回答怎樣選擇這些改變,使有限的計算抵達容易讀懂的形式。兩個問題並不相同。不斷交換同一對行,每一步都保留解集,卻不會完成求解。一個有效算法既需要保持不變的對象,也需要能夠持續前進的指標。
這裡的不變量是增廣系統的解集。向下消元的進展則是主元逐行下移,並且嚴格向右移動。一旦某個主元下方已經清零,後續只對更低的行運算,就不會破壞那些零。局部化簡能夠逐步累積,而不是互相抵消,正是算法成立的關鍵。
更精確地說,先觀察尚未處理的行,尋找其中最靠左且含非零元素的一欄。必要時交換行,把可用元素移到未處理部分的第一行,作為主元,並清除它下方的元素。隨後轉到更低的行,只向右繼續尋找。如果某一欄在尚未處理的行中全為零,就跳過該欄,不必嘗試除以零,也不必硬造一個主元。
“最靠左”這一要求有證明上的作用:新的主元出現以前,所有尚未處理的行在更左位置都是零。對這些行取線性組合,仍然保持這個零前綴。因此,新行的首個非零元素不會跑到先前主元的左邊。階梯條件是算法逐步建立的不變量,而不是算完之後碰巧成立的外觀。
如果尚未處理的行全部為零,向下消元立即結束。否則,每選一個主元都會佔用新的一行和新的一欄。行數與欄數有限,所以步驟必然終止。這個論證說明階梯形總能構造出來,而不依賴某個特別簡單的數值例子;但它尚未證明階梯形唯一。不同的合法選擇仍可產生不同的主元數值和主元上方元素。
向上清除為何不會破壞已經完成的欄
從 REF 開始,先把每個非零主元縮放為一,再從最後一個主元行向上處理。要清除某個主元上方的元素,就減去主元行的適當倍數。主元行在首個非零元素以前全為零,因此不會改變更早的主元欄;它右側已經清理完的主元欄,在當前行中也都是零,所以同樣不會被破壞。
這樣,每完成一欄,該欄便只有主元位置的 1 非零。逐步向上處理,最後所有主元欄都滿足這個條件,便得到 RREF。這個證明也說明,按確定次序清除通常比到處任意代換更容易檢查。
僅要求 REF 時,不必把主元變成一:二或負三都可以作為首個非零元素。要求 RREF 時,主元必須為一,這是定義中的額外條件。一致的階梯系統已經可以用回代求解;繼續化成最簡行階梯形,是為了直接展示所有主變量如何依賴參數。
算法的存在性和最終簡化結果的唯一性是兩個不同定理。消元過程證明至少能達到某個 RREF;唯一性定理說明,從同一矩陣出發,不同合法路徑若都完成了 RREF,所得矩陣必定相同。因此,中間步驟不同並不表示出錯,但兩個不同的最終 RREF 不能同時正確。後面的專節會給出唯一性證明。
走一次完整的消元路徑
消元法的核心做法,是由增廣矩陣開始,
然後反覆利用主元去清掉它下面的元素。現在我們沿着這個思路看一個
小例子:
x+2y+2zx+3y+3z2x+6y+5z=4,=5,=6.
它的增廣矩陣是
112236235456.
例題
把每個行變換都讀成一個目的
左上角的 1 已經是一個很方便的主元,所以第一個目標很清楚:
把這個主元下面的元素全部變成 0。
做
R2←R2−R1,R3←R3−2R1.就得到
10021221141−2.現在第 1 欄已經完成。下一個主元在第 2 行第 2 欄,所以用它清掉下面
的 2:
R3←R3−2R2.矩陣變成
10021021−141−4.到這一步,其實已經是 REF,可以用回代法解題。不過,如果你想得到最
方便直接閱讀的形式,就繼續做成 RREF。
先把最後一個主元改成 1:
R3←−R3⇒100210211414.然後清掉這個主元上方的元素:
R1←R1−2R3,R2←R2−R3,得到
100210001−4−34.最後,再把第二個主元上方的 2 清掉:
R1←R1−2R2,就得到 RREF
1000100012−34.這時解可以直接讀出:
x=2,y=−3,z=4.
這個例子要你記住的,不是孤立的步驟,而是以下節奏:
- 清主元下面的元素,建立 REF;
- 清主元上面的元素,建立 RREF;
- 到了 RREF,就可以直接讀解。
看主元階梯如何形成
下面的圖解序列沿用同一個例子。你可以把它當成正式行變換與互動步驟器
之間的橋:每一格都先固定一個數學目的,然後才進入下一步計算。
由主元階梯到 RREF把同一個消元例子看成一段短圖解:選主元、清元素,最後從 RREF 讀出已解方程組。
由增廣矩陣開始
第一列在第 1 行已有方便的主元。眼前目標是把這個主元下方的元素全部變成 0。
建立主元階梯
第一次清下方元素之後,下一個主元出現在第 2 行第 2 列。再清它下方的元素,就得到列階梯形。
標準化最後主元
最後一個非零行的 leading entry 是 -1。把整行乘以 -1,主元變成 1,但解集不變。
清主元上方
只有當每個主元都是所在列唯一的非零元素時,才到達 RREF;因此後半段運算會向上清除。
讀出已解變數
當左邊變成單位矩陣,右邊一列就可以直接讀成 x = 2、y = -3、z = 4。
這個計算唔係一堆互不相干的行變換,而係有控制地改變形狀:先清主元下方得到 REF,再標準化主元並清主元上方得到 RREF。
用互動步驟器再走一次
下面的步驟器保留同一條消元路徑,但刻意放慢節奏。每到一步,都請你
同時觀察:
- 正在處理哪一個主元;
- 正在做哪一個行變換;
- 做完之後,哪一部分變得更容易讀。
邊讀邊試
跟著走完一條行化簡路徑
互動步驟器會帶你走完一條完整的消元路徑,逐步顯示行變換、正在處理的主元,以及每一步得到的矩陣。
要留意甚麼
第 1 列的第一行已經有方便的主元 1,所以暫時不用換行。
先由增廣矩陣開始。第一個主元的工作,是幫我們把它下面的元素清掉。
在較大的方程組中追蹤樞軸
在較大的方程組中,同一套樞軸策略需要貫穿多步計算。每一步開始前,
指出正在清除哪一欄、使用哪個樞軸;完成後,再檢查先前樞軸欄的結構
是否保留。
考慮增廣矩陣
C=112522410011310120124225111318.
第一欄已有可用主元。先清掉它下方的元素,得到
1000200001131−1−1−30124201112−13.
現在第 2 行提供下一個主元。用它清掉下面相同方向的元素:
R3←R3−R2,R4←R4−3R2.
再把之後出現的重複行清掉後,一個清楚的階梯階段是
1000200001001−1000110201012−30.
這裡要暫停閱讀結構:主元欄是第 1、3、5 欄;自由欄是第
2、4、6 欄。要到 RREF,只需清掉第 5 欄主元上方的元素:
R2←R2−R3.
最後的最簡形是
C′=1000200001001−10000102−11015−30.
令
x2=u,x4=v,x6=w.
三條主元方程讀成
x1+2x2+x4+2x6x3−x4−x6x5+x6=1,=5,=−3.
所以所有解可以寫成
x=1050−30+u−210000+v−101100+w−2010−11.
這個例子說明,長消元的目的不只是製造 0,而是暴露主元與自由變量的
結構,然後由這個結構寫出完整解集。
怎樣讀一個 RREF 矩陣
當矩陣已經在 RREF 時,最重要的閱讀問題有三個:
- 每個變量欄都有主元嗎?
- 有沒有自由變量?
- 有沒有矛盾行?
例題
先讀結構,再做計算
假設你最後得到
1000103−20510.這裡第 1、2 欄是主元欄,但第 3 欄不是,所以第三個變量是自由變量。
因此,這個系統不是唯一解。它會有無限多解,因為你可以先自由選
第三個變量,再回過頭求出另外兩個主元變量。
定理
矛盾行代表甚麼?
如果行化簡後出現
[0001],它對應的方程就是 0=1。這是不可能成立的,所以原方程組不相容,
也就是無解。
例題
矩陣幾乎是 RREF 時
有時矩陣已經很接近 RREF,只差某個主元欄還未清乾淨。例如
100030000100110020104−130還不是 RREF,因為第 5 欄的主元上方仍有一個 2。只要做
R1←R1−2R3就得到
10003000010011000010−2−130.現在各主元欄已經清乾淨,所以矩陣在 RREF。自由變量是 x2 和
x4;若令 x2=s、x4=t,則解為
x=−20−103+s−31000+t−10−110.
跳過一欄也是數學資訊
例題
第一欄為零,算法仍能正常結束
把最後一欄看作常數欄,考慮三個未知量的系統:
[00204363].第一欄全零,因此主元從第二欄開始。分別把兩行的主元縮放成一,然後清除第二個主元上方的元素:
[00102131]R1←R1−2R2[00100111].結果給出 x2=1、x3=1,卻沒有限制 x1。所以所有解為 (t,1,1),其中 t∈R。代回原來的兩行,得到 2+4=6 和 3=3,都與參數無關。跳過第一欄並沒有遺漏方程或丟失條件,因為這個變量從一開始就沒有出現在任何方程中。
這個例子也說明主元不必在主對角線上。階梯形由每行首個非零元素的位置決定,並不要求第一行一定從第一欄開始。在較大的矩陣中,兩個相鄰主元之間也可以隔著多個非主元欄。
處理增廣矩陣時,變量欄和常數欄必須分清。最後一列出現主元,代表的是矛盾,而不是多了一個可求出的變量。因此要先檢查一致性,之後才能把非主元系數欄解釋為可任意指定的解坐標。非主元欄也不一定全零:其中的元素可以記錄自由變量怎樣影響多個主變量。
例如,前面結構例子中含有系數三和負二的欄雖然不是零欄,卻仍然沒有主元。相應變量可以自由選值,但主變量要隨之調整。“自由”是說它可以作為獨立選擇,不是說它對其他方程沒有影響。
不重算整題,也能分層檢查
檢查每個箭頭時,先核對目標位置是否按計劃改變,再核對整條受影響的行,特別是最後一欄。隨後檢查所宣稱的形式:REF 要滿足階梯條件並把全零行放在底部;RREF 還要有單位主元和乾淨的主元欄。兩類檢查針對不同錯誤。算術完全正確也可能尚未達到 RREF;外觀看起來正確的矩陣,也可能來自錯誤運算。
最後把參數表達式代回化簡後的方程。既然每一步都可逆,同一表達式也滿足原系統。把自由參數全設成零只能檢查一個特殊解;完整檢查要保留參數,並核對各參數的系數。否則,方向向量中的負號錯誤可能被一個恰好正確的特殊解掩蓋。
常見錯誤
常見錯誤
REF 不等於 RREF
很多人只要看到主元下面全是 0 就停手。那樣可能已經足夠做回代,但
還未到 RREF。RREF 要求主元所在的欄,其他位置也全部是 0。
常見錯誤
做操作時沒有明確目標
不要因為「好像要減一下」就隨便做行變換。每一步之前,先把目的說清
楚:
- 你現在用的是哪個主元?
- 你想消去哪個元素?
- 為甚麼這一步是最自然的下一步?
這個習慣會令你的計算更穩定,也更容易檢查符號錯誤。
快速檢查
思考檢查
甚麼情況下應該先換行,再繼續消元?
想一想目前的主元位置。如果那個位置是 0,但同一欄更下面有非零元
素,會怎樣處理?
解答 · 答案
當目前的主元位置不能用,例如它是 0,但同一欄下面有非零元素時,
就應先換行,把可用的主元移上來,然後再繼續消元。
思考檢查
[0001] 是一行無害的資料嗎?
解答 · 答案
不是。它代表 0=1,是矛盾,所以方程組不相容,亦即無解。
思考檢查
在上面的長消元例子中,為甚麼 x2、x4、x6 是自由變量?
看最後的 RREF C′。哪些變量欄含有首 1?
解答 · 答案
首 1 位於第 1、3、5 欄。因此第 2、4、6 欄沒有主元,
所以 x2、x4、x6 是自由變量。
練習
練習 1
由
120131251382
開始,如果你的目標是清掉第一個主元下面的元素,最自然的第一步行變
換是甚麼?
解答 · 練習 1 引導解答
第一個主元已經是第 1 行第 1 欄的 1。它下面的元素是 2,所以最自
然的做法是
R2←R2−2R1.這一步可以一次過把第 1 欄主元下方的元素清掉。
練習 2
考慮矩陣
1000102−10430.
它代表的系統有唯一解、無限多解,還是無解?
解答 · 練習 2 引導解答
這裡沒有矛盾行,所以不是無解。但第 3 欄沒有主元,因此存在自由變
量。只要有自由變量,解就不是唯一,而是無限多解。
練習 3
由
100030000100110020104−130
開始,哪一個單一步行變換可以把它化成 RREF?
解答 · 練習 3 引導解答
第 5 欄的主元是第 3 行的 1。同一主元欄中唯一未清掉的非零元素,
是第 1 行的 2,所以應從第 1 行減去兩倍第 3 行:
R1←R1−2R3.
練習 4
對於 RREF
1000200001001−10000102−11015−30,
令 x2=u、x4=v、x6=w。把 x1、x3、x5 寫成 u、
v、w 的式子。
解答 · 練習 4 引導解答
讀出三條非零行:
x1+2u+v+2wx3−v−wx5+w=1,=5,=−3.因此
x1=1−2u−v−2w,x3=5+v+w,x5=−3−w.
先讀這一頁
這一頁直接建立在
2.2 增廣矩陣與行變換
之上。如果你對「為甚麼行變換不會改變解集」仍然覺得不穩,請先回去
重讀那一頁,再練這裡的長消元路徑。