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

選擇、更新與擴展分解

收穫在此:一張橫貫所有分解的決策圖,外加讓它們在大規模下可用的招式——分塊、Schur 補、稀疏填入與秩一更新。

一張決策圖

你現在有了一個工具箱;真正的本領是把工具配給矩陣。選擇正確的分解從一個問題開始:A 有什麼結構?對稱性、正定性、稀疏性,以及你是需要特徵值還是僅需求解,都會把你推向不同的分解。把這一步做對,你可以比通用求解器快一個數量級、精度也更高。

  1. 對稱正定?用 Cholesky——最快、最穩定。
  2. 對稱但不定?用 LDL^T——保留對稱性,免開方。
  3. 一般方陣求解?用 帶部分選主元的 LU
  4. 最小二乘 / 高瘦矩陣 / 精度關鍵?用經 Householder 的 QR
  5. 需要特徵值?用 Schur(對稱則 -> 譜分解);需要幾何 / 條件資訊 -> SVD極分解

分塊與 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.
分塊 LU:消去 A 塊後,角上留下 Schur 補 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).
Sherman-Morrison-Woodbury:當 A 受到低秩擾動時,以 O(n^2) 修補分解。

這就是整條學習線的全貌:矩陣很少只是一格格數字。按它的對稱性、稀疏性、幾何來分解它,你就揭示出恰好所需的結構:一次快速求解、一個特徵值、一個旋轉、一個條件界。你所選的分解,是矩陣藉以告訴你它是什麼的透鏡。有意識地挑選這面透鏡,你便同時讀懂了問題,以及求解它的機器。