一張決策圖
你現在有了一個工具箱;真正的本領是把工具配給矩陣。選擇正確的分解從一個問題開始:A 有什麼結構?對稱性、正定性、稀疏性,以及你是需要特徵值還是僅需求解,都會把你推向不同的分解。把這一步做對,你可以比通用求解器快一個數量級、精度也更高。
分塊與 Schur 補
真實矩陣是巨大的,而同樣的分解既適用於純量也適用於分塊。把 A 劃分成 A = [A, B; C, D] 並消去左上塊:右下塊被換成 Schur 補 S = D - C A^-1 B。這種分塊分解是快取高效的 LAPACK 核心、PDE 求解器中的區域分解、以及高斯推斷中邊緣化步驟背後的引擎——Schur 補其實就是一塊在給定另一塊條件下的共變異數。
[ A B ] = [ I 0 ] [ A 0 ] [ I A^-1 B ] [ C D ] [ C A^-1 I ] [ 0 S ] [ 0 I ] # S = D - C A^-1 B is the Schur complement of A. # det([A B; C D]) = det(A) * det(S). # block-LU = recurse the same idea on A and on S.
稀疏性與填入
大多數大矩陣幾乎全是零。天真地分解它們是一場災難:消元會在 A 原本為零處製造出新的非零元——填入——這能把一個 99% 為空的矩陣變成稠密、撐爆記憶體的 L。良方是重排序:置換列行(如近似最小度、巢狀剖分),使消元引入盡可能少的填入。一個好的排序,常常就是問題能否裝進記憶體的分水嶺。
更新而非重新分解
最終的收穫,正是分解之所以主宰計算的原因:當 A 略有變化時,你不必從頭再來。低秩更新以 O(n^2) 修改現有分解,而不是以 O(n^3) 從頭重新分解。若 A 變為秩一擾動 A + u v^T,則 Sherman-Morrison-Woodbury 公式直接由舊分解再加一次額外求解,給出新的逆——以及新的解。
Sherman-Morrison (rank-one update of the inverse): (A + u v^T)^-1 = A^-1 - (A^-1 u)(v^T A^-1) / (1 + v^T A^-1 u) # You already have A = LU, so A^-1 u and v^T A^-1 are two cheap solves. # No O(n^3) refactor. Woodbury is the same idea for a rank-k update U V^T. # Used in: recursive least squares, Kalman filters, quasi-Newton (BFGS).
這就是整條學習線的全貌:矩陣很少只是一格格數字。按它的對稱性、稀疏性、幾何來分解它,你就揭示出恰好所需的結構:一次快速求解、一個特徵值、一個旋轉、一個條件界。你所選的分解,是矩陣藉以告訴你它是什麼的透鏡。有意識地挑選這面透鏡,你便同時讀懂了問題,以及求解它的機器。