分解一次、求解多次
想像你得替一百個不同的人打開同一扇門。你可以每次從頭打造一把新鑰匙——或者只配一把好鑰匙,然後傳著用。「分解一次、求解多次」就是把這第二種策略用在線性系統上:當你必須對同一個矩陣 A、但許多不同的右端 b 解 A x = b 時,你只對 A 做一次昂貴的工作,然後對每個 b 重複使用。
具體來說,解 A x = b 中昂貴的部分是消去,它產生 LU 分解 P A = L U,成本約 2 n^3 / 3 次浮點運算。但一旦有了 L 與 U,對任何新的 b 求解就只是兩次三角求解——前代解 L y = P b,再回代解 U x = y——各只約 n^2 次。所以第一次求解花 O(n^3),之後每個新 b 只花 O(n^2)。對 k 個右端,你付一次立方分解加上 k 次便宜的二次求解,而非 k 次完整的立方消去。
這是 LU(與喬列斯基)分解被算出並儲存、而非用完就丟的最重要實務理由之一。它無處不在:隱式時間步進每一步都重用同一個分解,最佳化用同一矩陣搭配更新的梯度求解,反問題反覆碰到同一個 A。這也是你絕不會用求逆的方式解 A x = b 的原因:構造 A 的逆比起保留分解並重用,既更花功夫又更不準確。唯一注意點:若 A 本身改變,存下的分解就過時了,必須重算(或便宜地更新)。
對 n = 1000、50 個不同的 b 解 A x = b:一次 LU 分解(約 6.7e8 次)加上 50 次求解(約 50 * 2e6 = 1e8 次),相對於 50 次完整消去(約 3.3e10 次)——約快 50 倍。
把立方分解的成本攤到許多次二次求解上,正是直接法的整套經濟學。
這個技巧只在 A 維持不變時划算;若 A 改變就必須重新分解。這也是要儲存 L 與 U、而非逆矩陣的原因——逆矩陣構造起來更花成本,求解卻更不準。