JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

從消元到 LU:把分解看作記帳

第一卷只解一次 Ax=b。把高斯消元重寫成乘積 A=LU,你就能反覆求解——再加上選主元,讓它永不崩潰。

重放消元

在第一卷裡,你對增廣矩陣高斯消元來解一個方程組。一旦得到答案,所做的工作——列變換——就被丟掉了。分解把這份工作保存下來。每一步消元——把某一列的倍數從另一列減去——本身就是一次矩陣乘法,而所有這些步驟的乘積正好把 A 化為上三角形式。

你用來清掉每一行的乘數,恰好整齊地放進一個下三角矩陣 L(對角線為 1);清完後的結果就是上三角矩陣 U。這就是 LU 分解的全部內容:A = LU,其中 L 記錄*你如何*消元,U 記錄*剩下了什麼*。

A = [ 2  1  1 ;     L = [ 1   0  0 ;    U = [ 2   1    1 ;
      4  3  3 ;           2   1  0 ;          0   1    1 ;
      8  7  9 ]           4   3  1 ]          0   0    2 ]

# row2 -= 2*row1, row3 -= 4*row1, then row3 -= 3*row2.
# the multipliers 2, 4, 3 are exactly the sub-diagonal of L.
# check: L @ U reproduces A, entry by entry.
一個 3x3 的 LU:消元乘數變成 L 的元素。

為何如此——分解一次,永久複用

一旦存好 A = LU,對任意新的 b 求解 Ax = b 幾乎不花代價:用前代(自上而下)解 Ly = b,再用回代(自下而上)解 Ux = y。昂貴的 O(n^3) 消元只做一次;之後每個右端項僅需 O(n^2)。對一位用上千種方式給同一座橋加載的結構工程師來說,這就是幾分鐘與幾毫秒之差。

  1. 分解一次:A = LU(O(n^3) 的代價)。
  2. 前代解 Ly = b 求 y——L 是下三角的,y_1 直接得到,再逐級向下傳遞。
  3. 回代解 Ux = y 求 x——U 是上三角的,x_n 直接得到,再逐級向上傳遞。

選主元:別除以(近乎)零

樸素 LU 在主元為零的瞬間就崩潰,而且遠在此之前就開始退化:除以極小的主元會放大捨入誤差。解決辦法是部分選主元——在清每一行之前,把該行中絕對值最大的列換到上面。這些交換被記錄在置換矩陣 P 中,給出你真正會用到的形式:PA = LU。選主元使 L 中每個乘數的絕對值都不超過 1,從而讓分解在數值上保持誠實。

沒有選主元規則,LU 甚至不是唯一的——在不同的列序下,許多 L、U 對都能復原給定的 A。把 L 的對角線固定為 1 並固定主元規則後,分解就變得唯一。唯一性是貫穿整條學習線的主題:一種分解只有在你確定了是什麼讓它成為*那個*分解之後,才真正有價值。