數值線性代數
直接解法與迭代解法
求解 Ax = b 有兩種哲學。直接法把 A 分解一次——成 LU、QR 或 Cholesky——然後通過廉價的前代與回代求解。在精確算術下,它用有限且可預測的步數給出答案。迭代法則從一個猜測出發,反覆精化,生成 x0, x1, x2, ……(但願)收斂到解,當殘差 b - A x_k 足夠小時停止。
直接法穩健而準確:無需調參,一次分解可應對多個右端項,且後向穩定的分解給出後向穩定的求解。其弱點是開銷與記憶體。分解一個稠密的 n 階矩陣需 O(n^3) 的工作量和 O(n^2) 的儲存;對稀疏矩陣,因子還會填入——零變成非零——使記憶體暴增。
迭代法恰好在直接法吃力之處取勝:極大、稀疏或具結構的系統。每次迭代通常只需一次矩陣-向量乘積,對稀疏矩陣而言其代價正比於非零元個數,而非 n^2。它們從不需要儲存分解。代價是不確定性:收斂取決於矩陣的譜與條件性,可能很慢,或需要一個好的預條件子才實用。
誠實的總結是:規模與結構說了算。對中等規模的稠密系統(至多幾千個未知數),用直接求解器就別再擔心了。對來自離散化偏微分方程或圖的巨型稀疏系統,n 可達數百萬,直接分解根本不可能,帶預條件的迭代 Krylov 方法是唯一現實的選擇。
direct: O(n^3) once, then O(n^2) per solve | iterative: O(nnz) per step, k steps
開銷對比:直接分解付一次大代價;迭代法每步付小代價,但步數 k 不確定。
並非總是非此即彼。一種常見的混合做法是用不完全(近似)直接分解作為迭代法內部的預條件子,把前者的穩健與後者的可擴展性融合起來。
又稱
另見