為甚麼要學消元
很多同學第一次接觸高斯消元時,都會覺得它像一堆死規則:
- 換行,
- 乘一行,
- 減一行,
- 一直做到矩陣看起來「整齊」為止。
這個理解太弱。
高斯消元真正的作用,是把本來難讀的方程組,逐步改寫成容易閱讀的
形式。每一步行變換都應該回答一個很清楚的問題,例如:
- 我下一步想把哪個變量的位置弄清楚?
- 哪個元素正在阻礙我?
- 用哪個操作,可以在不改變解集的情況下製造更多 0?
如果你一直帶著這些問題去做,消元就不再像機械重複,而會變成一種
有方向的閱讀方法。
先講直覺:我們想得到甚麼形狀?
我們想得到的,不只是「比較簡單的矩陣」,而是方便讀出結構的矩
陣。
實際上,這表示你要不斷做以下事情:
- 選一個主元,
- 把它下面的元素清掉,
- 轉到右下角較小的子矩陣,
- 如果想要最易讀的形式,再把主元上方的元素也清掉。
所以,消元其實是在一步一步建立一條主元階梯。
定義
REF 與 RREF
矩陣屬於 行階梯形(REF),表示:
- 全 0 行都放在最下面;
- 每一個非零行的第一個非零元素,都比上一行的第一個非零元素更靠
右。
矩陣屬於 最簡行階梯形(RREF),則還要再滿足:
- 每個主元都等於
1;
- 每個主元所在的列,除了那個主元之外,其餘位置全部都是
0。
每一個非零行最左邊的第一個非零元素,叫做 主元。含有主元的列,
叫做 主元列。沒有主元的列,對應的是 自由變量。
這些詞彙很重要,因為之後你判斷「唯一解 / 無限多解 / 無解」時,就
是靠它們。
定理
為甚麼行化簡是安全的?
如果兩個增廣矩陣是行等價的,那麼它們代表的是等價方程組,也就是說
它們有相同的解集。
所以,行化簡不是在改題目,而是在重新排列同一題的資訊。
走一次完整的消元路徑
消元法的核心做法,是由增廣矩陣開始,
然後反覆利用主元去清掉它下面的元素。現在我們沿着這個思路看一個
小例子:
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,就可以直接讀解。
用互動步驟器再走一次
下面的步驟器保留同一條消元路徑,但刻意放慢節奏。每到一步,都請你
同時觀察:
- 正在處理哪一個主元;
- 正在做哪一個行變換;
- 做完之後,哪一部分變得更容易讀。
邊讀邊試
跟著走完一條行化簡路徑
互動步驟器會帶你走完一條完整的消元路徑,逐步顯示行變換、正在處理的主元,以及每一步得到的矩陣。
要留意甚麼
第 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.
常見錯誤
常見錯誤
REF 不等於 RREF
很多人只要看到主元下面全是 0 就停手。那樣可能已經足夠做回代,但
還未到 RREF。RREF 要求主元所在的列,其他位置也全部是 0。
常見錯誤
做操作時沒有明確目標
不要因為「好像要減一下」就隨便做行變換。每一步之前,先把目的說清
楚:
- 你現在用的是哪個主元?
- 你想消去哪個元素?
- 為甚麼這一步是最自然的下一步?
這個習慣會令你的計算更穩定,也更容易檢查符號錯誤。
快速檢查
快速檢查
甚麼情況下應該先換行,再繼續消元?
想一想目前的主元位置。如果那個位置是 0,但同一列更下面有非零元
素,會怎樣處理?
快速檢查
[0 0 0 | 1] 是一行無害的資料嗎?
快速檢查
在上面的長消元例子中,為甚麼 x2、x4、x6 是自由變量?
練習
練習 1
由
120131251382
開始,如果你的目標是清掉第一個主元下面的元素,最自然的第一步行變
換是甚麼?
練習 2
考慮矩陣
1000102−10430.
它代表的系統有唯一解、無限多解,還是無解?
練習 3
由
100030000100110020104−130
開始,哪一個單一步行變換可以把它化成 RREF?
練習 4
對於 RREF
1000200001001−10000102−11015−30,
令 x2=u、x4=v、x6=w。把 x1、x3、x5 寫成 u、
v、w 的式子。
先讀這一頁
這一頁直接建立在
2.2 增廣矩陣與行變換
之上。如果你對「為甚麼行變換不會改變解集」仍然覺得不穩,請先回去
重讀那一頁,再練這裡的長消元路徑。