高斯消去法計算機:一步步解線性方程組
高斯消去法計算機透過基本列運算,把增廣矩陣化為列階梯形,再用回代求出每個變數,藉此解線性方程組。無論你是在檢查作業、驗證線性代數證明,或是求解含三個以上未知數的工程系統,理解計算機背後的方法都能幫助你抓出算術錯誤,並更有把握地解讀結果。本文將帶你走過列運算規則、兩個完整範例(2×2 與 3×3 方程組)、選主元策略、常見錯誤與練習題,讓你既能手算求解,也能驗證計算機輸出的答案。
目錄
什麼是高斯消去法?
高斯消去法是一種求解線性方程組的方法:先把方程組寫成增廣矩陣,再用基本列運算把它化為列階梯形——一種三角形排列,其中每一列的前導零都比上一列更多。矩陣化成這個形式後,最後一個方程式只含一個變數,可以直接解出,接著再往上逐列代入,這個過程稱為回代。這個方法以卡爾·弗里德里希·高斯(Carl Friedrich Gauss)命名,不過早在近兩千年前,中國的數學典籍《九章算術》中就已出現它的各種版本。它適用於任何規模的方程組——兩個方程式或二十個方程式都行——這也是為什麼大多數計算機與電腦代數系統在底層都採用這個演算法,並常以稱為 LU 分解的變形實作。除了課業之外,同樣的列化簡技巧也支撐著結構工程的載重計算、以克希荷夫定律進行的電路分析、電腦圖學的座標變換,以及統計與機器學習中使用的最小平方法擬合。
列階梯形的意思是:每個前導元素(一列中的第一個非零數字)都嚴格位於上一列前導元素的右側,且每個前導元素下方的元素都是零。
高斯消去法計算機如何運作?
高斯消去法計算機會自動完成學生手算時要走的同樣四個階段,差別在於它不會出現算術失誤——而一旦方程組出現分數或超過兩個變數,這一點就格外重要。計算機會依你的方程式建立增廣矩陣,套用列運算把每個主元下方的元素消為零,在主元為零時檢查是否需要交換列,最後從三角形結果中透過回代讀出解。好的計算機還會標示出方程組無解(出現像 0 = 5 這種矛盾列)或有無限多解(出現全零列)的情況,而手算若太早停下就可能漏掉這些訊息。多數計算機在內部也預設採用部分選主元法——總是選取每一行中絕對值最大的可用元素作為主元——因為即使人工求解者樂於使用較小、較零亂的主元,這個做法仍能把捨入誤差控制得很小。
1. 步驟 1:寫出增廣矩陣
把每個方程式中各變數的係數取出來排成矩陣,常數項放在直線右側。含 x、y、z 的 3 個方程式組成的方程組會變成一個 3×4 的增廣矩陣。
2. 步驟 2:向前消去
由左至右逐行處理,用列運算把當前主元下方的每個元素都變成零。這會產生上三角形的列階梯形。
3. 步驟 3:回代
從最底下那一列開始(此時它只含一個變數),解出該變數,再把它的值代入上一列解出下一個變數,如此重複直到每個變數都求出為止。
4. 步驟 4:代入驗算
把所有求得的值代回原始方程式。如果每個方程式都成立,解就是正確的——光是這一項檢查,就能抓出大多數的高斯消去法錯誤。
高斯消去法計算機的價值不在於取代這個方法,而在於確認你手算的列運算得到了相同的三角形矩陣,讓你能夠信任最終答案。
如何手算高斯消去法?
高斯消去法只依賴三種基本列運算,矩陣上所有合法的操作都是由這三個動作組合而成。順序弄錯不會讓方法失效,但把運算只套用在一列的部分位置卻是最常見的錯誤來源,因為運算必須套用到整列——包括直線右側的常數項。一個實用的心智模型:把每一列想成一個完整的方程式,而不是一串各自獨立的數字。你對這個方程式的一邊做了什麼,就要對整體做同樣的事,就像你把它寫成原本的 x + y + z = 6 形式來操作,而不是當成矩陣的一列。
1. 運算 1:交換兩列(Ri ↔ Rj)
交換兩個方程式的位置不會改變方程組的解——它們仍是同樣的方程式,只是順序不同。當某個主元位置為零時,就用這個運算來選主元。
2. 運算 2:一列乘以非零常數(kRi → Ri)
把某個方程式中的每一項都乘以同一個非零數 k,不會改變滿足它的 x、y、z 值。這用來簡化某一列,或為消去做準備。
3. 運算 3:把某一列的倍數加到另一列(Ri + kRj → Ri)
這是高斯消去法的主力運算:把某一列換成它本身加上另一列的某個倍數,倍數的選擇要讓目標位置變成零。這就是你把主元下方每一列的變數消去的方法。
經驗法則:在運算 3 中選擇倍數 k,使主元的係數乘以 k 後恰好抵消你要消去的元素。若主元是 2,而你想把它下方的 6 消為零,就取 k = −3。
範例解析:用高斯消去法解 2×2 方程組
求解方程組:2x + 3y = 8 與 4x − y = 2。這個範例在最簡單的情況——兩個方程式、兩個未知數——上展示完整流程,之後再擴展到三個變數。
1. 步驟 1:寫出增廣矩陣
[ 2 3 | 8 ] [ 4 −1 | 2 ]
2. 步驟 2:從第 2 列消去 x
第 1 列的主元是 2。要把第 2 列的 4 消為零,使用 R2 → R2 − 2R1。第 2 列變成:(4 − 2×2), (−1 − 2×3), (2 − 2×8) = (0, −7, −14)。矩陣現在是: [ 2 3 | 8 ] [ 0 −7 | −14 ]
3. 步驟 3:解出 y
第 2 列讀作 −7y = −14,所以 y = −14 ÷ −7 = 2。
4. 步驟 4:回代求 x
第 1 列讀作 2x + 3y = 8。代入 y = 2:2x + 3(2) = 8 → 2x + 6 = 8 → 2x = 2 → x = 1。
5. 步驟 5:檢查解
把 x = 1, y = 2 代入兩個原始方程式。方程式 1:2(1) + 3(2) = 2 + 6 = 8 ✓。方程式 2:4(1) − 2 = 4 − 2 = 2 ✓。解 (x, y) = (1, 2) 驗算通過。
解:x = 1, y = 2。高斯消去法計算機會瞬間給出同樣這組答案,但親手算過一遍才能清楚看出答案為什麼正確。
範例解析:用高斯消去法解 3×3 方程組
求解方程組:x + y + z = 6、2x − y + z = 3 與 x + 2y − z = 2。這正是高斯消去法展現價值之處——面對三個變數時,代入法和簡單消去法會變得笨重,而列運算法卻能乾淨俐落地擴展。
1. 步驟 1:寫出增廣矩陣
[ 1 1 1 | 6 ] [ 2 −1 1 | 3 ] [ 1 2 −1 | 2 ]
2. 步驟 2:從第 2、3 列消去 x
主元是第 1 列的 1。R2 → R2 − 2R1 得到 (2−2, −1−2, 1−2 | 3−12) = (0, −3, −1 | −9)。R3 → R3 − 1R1 得到 (1−1, 2−1, −1−1 | 2−6) = (0, 1, −2 | −4)。矩陣: [ 1 1 1 | 6 ] [ 0 −3 −1 | −9 ] [ 0 1 −2 | −4 ]
3. 步驟 3:從第 3 列消去 y
主元現在是第 2 列的 −3。R3 → R3 + (1/3)R2 得到 (0, 1 + (1/3)(−3), −2 + (1/3)(−1) | −4 + (1/3)(−9)) = (0, 0, −7/3 | −7)。矩陣: [ 1 1 1 | 6 ] [ 0 −3 −1 | −9 ] [ 0 0 −7/3 | −7 ]
4. 步驟 4:解出 z(回代開始)
第 3 列讀作 −(7/3)z = −7,所以 z = −7 ÷ (−7/3) = −7 × (−3/7) = 3。
5. 步驟 5:解出 y
第 2 列讀作 −3y − z = −9。代入 z = 3:−3y − 3 = −9 → −3y = −6 → y = 2。
6. 步驟 6:解出 x
第 1 列讀作 x + y + z = 6。代入 y = 2, z = 3:x + 2 + 3 = 6 → x = 1。
7. 步驟 7:檢查解
x = 1, y = 2, z = 3。方程式 1:1+2+3 = 6 ✓。方程式 2:2(1)−2+3 = 2−2+3 = 3 ✓。方程式 3:1+2(2)−3 = 1+4−3 = 2 ✓。三個方程式全都成立。
解:(x, y, z) = (1, 2, 3)。留意其中的規律:每個消去步驟只會動到當前主元下方的列,這正是方程組變大時算術不至於失控的原因。
為什麼需要部分選主元法?
只要你試著除以為零的主元,高斯消去法就會崩潰;而當主元是非常小的非零數時,方法雖然嚴格來說沒錯,卻會變得不可靠,因為除以接近零的值會放大捨入誤差。部分選主元法同時解決這兩個問題:在消去之前,先把當前這一列與下方某一列交換,讓主元所在行擁有較大絕對值的元素上來。在用精確分數手算的作業題中,只有主元為零才必須交換;但當計算機以小數運算時,即使是 0.0001 這樣的主元也可能把捨入誤差放大到產生明顯錯誤的最終答案,這就是為什麼軟體總是選取可用元素中絕對值最大的那個作為主元,而不是它找到的第一個非零元素。
1. 步驟 1:辨識出為零或過小的主元
假設你的矩陣第 1 行在即將作為主元列的那一列上是 0,例如方程組 0x + 2y − z = 3、x − y + 2z = 4、3x + y − z = 8。你不能除以那個 0。
2. 步驟 2:與具有非零(或更大)元素的列交換
把第 1 列與第 3 列交換,因為第 3 列在 x 那一行是 3——這是可用元素中絕對值最大的。第 1 列 ↔ 第 3 列後得到:3x + y − z = 8、x − y + 2z = 4、0x + 2y − z = 3。現在就能以 3 為主元正常進行消去。
3. 步驟 3:照常繼續消去
有了非零主元之後,套用運算 3 把它下方的整行清為零,接著移到下一行並重複主元檢查。
部分選主元法則:每一步都把當前主元所在行中絕對值最大的那一列換上來。這是所有嚴謹的高斯消去法計算機與數值線性代數函式庫的標準做法。
高斯消去法最常見的錯誤有哪些?
大多數高斯消去法的錯誤來自少數幾種反覆出現的失誤,而非對方法本身的誤解。知道要留意什麼,能減少你必須從頭重做一題的次數;而且在信任計算機輸出之前,也值得把這份清單過一遍,因為你把方程組輸入到計算機欄位時,同樣的失誤也會冒出來。
1. 忘記把運算套用到整列
當你計算 R2 → R2 − 2R1 時,−2R1 這個倍數要套用到第 1 列的每一個元素,包括直線後面的常數項。漏掉常數項那一行是最常見的單一錯誤。
2. 相減列時的正負號錯誤
R2 − 2R1 的意思是把第 1 列每個元素的兩倍減掉——遇到負主元或負的列元素時,很容易漏掉一個負號。在計算每個元素之前先把運算改寫成 R2 + (−2)R1,可以減少符號錯誤。
3. 除以為零的主元而不去交換列
如果當前主元是 0,你就不能用那一列去消去該行——必須先如上面選主元範例所示,換入一個該位置為非零的列。
4. 把列階梯形和最簡列階梯形搞混
列階梯形只要求每個主元下方為零;最簡列階梯形(用於高斯-約旦消去法)還要求每個主元上方也為零,且主元等於 1。標準的高斯消去法在列階梯形就停下,改以回代收尾。
5. 太早把分數四捨五入
在消去進行到一半時把 −7/3 這類主元分數換成小數,會引入捨入誤差,並在後面的列中不斷累積。請保留精確分數直到最終答案,或讓計算機幫你一路帶著算。
如果你的最終檢查(把解代回每一個原始方程式)不成立,錯誤幾乎總是出在前面某個列運算——在斷定整個做法錯了之前,先逐一重新檢查每一步。
高斯消去法 vs. 其他方法:什麼時候該用它?
代入法和簡單消去法用在雙變數方程組上沒問題,但一旦方程組有三個以上未知數就容易出錯,因為你得同時追蹤好幾次代入。使用行列式的克拉瑪法則在 2×2 和 3×3 方程組上很優雅,但擴展性很差——計算大型方程組行列式的成本增長遠比高斯消去法快得多,這也是為什麼無論手算或軟體,它都很少用在小型方程組以外的場合。
1. 什麼時候用代入法
你有兩個方程式,而其中一個已經解出某個變數,或者解出某個變數非常容易(例如 x = y + 3)。
2. 什麼時候用克拉瑪法則
你有一個 2×2 或 3×3 方程組,而且只需要求某一個變數的值,因為克拉瑪法則讓你不必解出其他變數就能算出單一變數。範例:對於 2x + 3y = 8 與 4x − y = 2(就是上面解過的同一個方程組),係數行列式為 D = (2)(−1) − (3)(4) = −2 − 12 = −14。把 x 那一行換成常數項後得到 Dx = (8)(−1) − (3)(2) = −8 − 6 = −14,所以 x = Dx/D = −14/−14 = 1——與高斯消去法的答案一致。對 3×3 方程組來說,同樣的行列式做法需要計算三個 3×3 行列式而不是一個,而每個 3×3 行列式要做六次乘法,這就是為什麼這個方法一旦超過三個變數就不再實用。
3. 什麼時候用高斯消去法
你有三個以上的變數、需要每一個變數的值,或想要一個擴展性可預期的方法——這也是矩陣計算機與工程軟體在內部使用的方法,常以 LU 分解的形式實作。
4. 什麼時候用矩陣求逆
你需要用不同的常數向量反覆求解同一個方程組(同一個係數矩陣)——只算一次反矩陣,比每次都重跑一遍消去更有效率。
對於四個以上變數的方程組,高斯消去法基本上是唯一實用的手算方法——像克拉瑪法則這類以行列式為基礎的做法,遠在那之前就已經變得不切實際。
練習題:測驗你的高斯消去法功力
用上面的列運算方法解這三個方程組,然後核對你的答案。請先用紙筆各做一遍,把你套用的每一個列運算都記錄下來,之後再拿計算機對答案——這樣的順序才是真正培養能力的關鍵,而不只是確認一個最終數字。第三題是個值得單獨認識的特例,因為它測驗的是你是否理解列階梯形結果的意義,而不只是會不會算。
1. 題目 1(2×2 方程組)
求解:3x + 2y = 16 與 x − y = 2。解答:增廣矩陣 [3 2 | 16; 1 −1 | 2]。可以交換列取得方便的主元,或直接消去:R1 → R1 − 3R2 得到 (3−3, 2+3 | 16−6) = (0, 5 | 10),所以 y = 2。代入 x − y = 2:x = 4。解:(x, y) = (4, 2)。驗算:3(4)+2(2) = 12+4 = 16 ✓,4−2 = 2 ✓。
2. 題目 2(3×3 方程組)
求解:x + y + z = 4、2x − y + z = 8、x + 2y − z = −3。解答:(x, y, z) = (2, −1, 3)。驗算:2−1+3 = 4 ✓,2(2)−(−1)+3 = 4+1+3 = 8 ✓,2+2(−1)−3 = 2−2−3 = −3 ✓。
3. 題目 3(特例——無限多解)
求解:x + y = 2 與 2x + 2y = 4。解答:R2 → R2 − 2R1 得到 (2−2, 2−2 | 4−4) = (0, 0 | 0)——整整一列都是零。這表示第二個方程式只是第一個的兩倍,所以在直線 x + y = 2 上有無限多組解,而不是單一的 (x, y) 配對。若 R2 化簡後變成 (0, 0 | 3),那就代表這是一個矛盾方程組,完全沒有解。認出這兩種結果,和算出乾淨的數值答案同樣重要,而當你用 Solvify 的逐步求解器檢查作業或考題時,高斯消去法計算機正是會自動標示出這些情況。
左邊一整列都是零而右邊是非零常數(0 = k, k ≠ 0),代表無解。左右兩邊都是零的一列(0 = 0),代表有無限多解。
相關文章
相關數學解題工具
智慧掃描解題
拍下線性方程組或矩陣題目的照片,立即取得逐步的高斯消去法解答。
逐步解題步驟
從增廣矩陣、回代到最終驗算,每一個列運算都明確呈現。
AI 數學家教
針對選主元、列階梯形,或某個方程組為何無解等問題追問,並獲得針對你這道題目量身訂做的解答。
