1950 — 冪迭代法#
案件摘要#
1950 年前後,矩陣特徵值的數值計算出現了第一件「以最笨的方法辦成最聰明的事」的案子:不分解、不消去,只是反覆把矩陣 \(A\) 乘在一個向量上—— \(v_{k+1} = Av_k / \|Av_k\|\) ——向量竟自己「漂」向主特徵向量。配合 Rayleigh 商 \(\lambda = \frac{v^TAv}{v^Tv}\) ,主特徵值也自動浮出水面。冪迭代法是特徵值理論第一次被壓縮成三行程式碼,也是此後所有 Krylov 子空間方法、乃至 PageRank 的共同祖先。
前因 -- 為什麼會有這個案子#
- 19 世紀 Cayley–Hamilton(1858)確立特徵值概念,Jordan 標準形說明矩陣行為由特徵結構決定。
- 1907 年 Perron 證明正矩陣必有唯一的「主特徵值」(模最大且單根);1912 年 Frobenius 推廣到非負不可約矩陣——這正是冪迭代會收斂的數學保證。
- 1930 年代,Richard von Mises 在德國傳播「迭代法」(Iterationsverfahren):對動力系統 \(\sigma_{k+1} = A\sigma_k\) ,觀察其漸近行為即得主特徵值。這是本案最早的案發紀錄。
- 1950 年代,美國 Los Alamos 與英國 NPL 的計算需求(中子擴散、飛機振動)迫使特徵值計算規模化,Wilkinson 等人把冪迭代整理成標準教材方法。
- 案發動機:實際問題(振動模態、量子基態、穩定性分析)往往只要求最大或最小特徵值,何必算出全部?只需「定向放大」主特徵方向的成分。
線索與推理 -- 數學式、程式、理論#
線索一:為什麼反覆乘 \(A\) 就會收斂#
設 \(A\) 可對角化, \(A = X\Lambda X^{-1}\) ,特徵值 \(|\lambda_1| > |\lambda_2| \ge \cdots\) 。把任意向量按特徵基展開:
每次乘 \(A\) ,各成分被放大自己的特徵值倍:
因為 \(|\lambda_2/\lambda_1| < 1\) ,第二項以幾何速度消失, \(v_k\) 的方向收斂到 \(x_1\) 。收斂速率由譜隙比 \(\left|\lambda_2/\lambda_1\right|\) 決定——每迭代一次,誤差乘上 \(\left|\lambda_2/\lambda_1\right|\) 倍。這就是本案的「指紋」:譜隙越大收得越快,譜隙小(如 \(0.99\) )則慢得令人絕望。
線索二:Rayleigh 商 —— 特徵值的自動指認器#
歸一化避免溢位後, \(v_k \to x_1/\|x_1\|\) ,但特徵值從哪來?對每個近似向量定義:
這是 Rayleigh 商(Rayleigh, 1877《聲學理論》已用於振動問題)。它有三個關鍵性質: 1. 若 \(v = x_i\) 恰為特徵向量, \(\rho(v) = \lambda_i\) 。 2. \(\rho(v)\) 是所有 \(v\) 方向上「最優的特徵值估計」: \(\min_{v\neq 0}\rho(v) = \lambda_{\min}\) , \(\max = \lambda_{\max}\) (變分原理)。 3. 誤差是二階的:若 \(\|v - x_1\| = O(\epsilon)\) 且 \(\lambda_1\) 單根,則 \(|\rho(v) - \lambda_1| = O(\epsilon^2)\) 。
性質 3 意味著:向量方向每進步一位數,特徵值估計自動進步兩位數——Rayleigh 商是「免費的二次加速」。
線索三:缺陷與補救#
冪迭代有三個已知的破綻,各自催生了後續案件: 1. ** \(|\lambda_1| = |\lambda_2|\) 時不收斂**(如實對稱矩陣的正負成對特徵值 \(\pm\lambda\) ,向量會在兩方向間震盪)。補救:位移反冪法 \(v_{k+1} = (A - \sigma I)^{-1}v_k\) ,收斂到最靠近 \(\sigma\) 的特徵值——這需要解線性系統,正好接上 LU 分解。 2. 收斂慢。補救:不是迭代一個向量,而是迭代整個子空間——1951 年 Lanczos(對稱矩陣)與 Arnoldi(一般矩陣,1951 年後)建立 Krylov 子空間方法 \(\mathcal{K}_m = \text{span}\{v_0, Av_0, \dots, A^{m-1}v_0\}\) ,本質上「同時」做了多次冪迭代並在子空間內做 Rayleigh–Ritz 提取。 3. 只抓一個特徵對。補救:deflation(收縮),找到 \(\lambda_1\) 後在 \(A - \lambda_1 x_1 x_1^T\) 上繼續跑,或直接對多列投影。
程式碼範例:冪迭代收斂到主特徵值,Rayleigh 商驗證#
import numpy as np
rng = np.random.default_rng(42)
# 構造已知譜的對稱矩陣:特徵值 10, 3, 5, 1, 2
Q, _ = np.linalg.qr(rng.normal(size=(5, 5)))
lam = np.array([10.0, 3.0, 5.0, 1.0, 2.0])
A = Q @ np.diag(lam) @ Q.T
v = rng.normal(size=5)
v /= np.linalg.norm(v)
for k in range(1, 31):
w = A @ v
v_new = w / np.linalg.norm(w)
rayleigh = v_new @ A @ v_new # Rayleigh 商
if k % 5 == 0 or k == 1:
err = abs(rayleigh - lam.max())
ratio = np.abs(err) ** 0.5 # 看二階收斂的跡象
print(f"k={k:2d} Rayleigh 商={rayleigh:.8f} |誤差|={err:.2e}")
v = v_new
# 對照 numpy
print("numpy 主特徵值 =", np.linalg.eigvalsh(A).max())
print("收斂速率預測 |λ2/λ1| =", abs(lam[1] / lam[0]))
輸出顯示 Rayleigh 商快速逼近 10,且誤差以每步約平方的速度縮小——向量方向的一階誤差在 Rayleigh 商上變成二階收斂,正符合線索二的理論預測。
結案 -- 後果與影響#
- 冪迭代成為主特徵值計算的入門標準,所有數值線性代數教科書的第一個迭代法。
- 1951 年 Lanczos 演算法(對稱)與 Arnoldi 演算法推廣,發展成今日大規模特徵值計算的主力:ARPACK(
scipy.sparse.linalg.eigs/eigsh的核心)本質上就是「聰明版的冪迭代」。 - Rayleigh 商成為量子力學變分原理、有限元模態分析、模型降階的通用工具。
- 1998 年 Page 與 Brin 的 PageRank:整個 Web 超連結矩陣的 PageRank 向量就是冪迭代的極限—— \(10^{10}\) 規模的矩陣也只有冪迭代(配合稀疏乘法)跑得動。PageRank 成為本案最轟動的「現代重審」。
- 影響至今:譜聚類、譜嵌入、Google 搜尋、量子化學基態計算,全是冪迭代思想的直系後裔。
關鍵人物與文獻#
| 人物 | 角色 |
|---|---|
| Richard von Mises | 1930 年代傳播冪迭代法 |
| Oskar Perron / Georg Frobenius | 正矩陣主特徵值定理(收斂保證) |
| John William Rayleigh | Rayleigh 商(1877《聲學理論》) |
| Cornelius Lanczos | 1951 年 Krylov 子空間方法 |
| Walter Edwin Arnoldi | 1951 年 Arnoldi 演算法 |
| Larry Page / Sergey Brin | 1998 年 PageRank = 冪迭代的 Web 規模應用 |
- R. von Mises & H. Pollaczek-Geiringer, Praktische Verfahren der Gleichungsauflösung, ZAMM 9 (1929)。
- C. Lanczos, An iteration method for the solution of the eigenvalue problem..., J. Res. NBS 45, 255 (1950)。
- G. H. Golub & C. F. Van Loan, Matrix Computations, 4th ed., Ch. 8 (2013)。
- L. Page et al., The PageRank Citation Ranking, Stanford InfoLab (1999)。