QR 演算法
QR 演算法是計算稠密矩陣「全部」特徵值的主力,也是數值數學中最美的驚喜之一。它的赤裸想法簡單到幾乎令人不敢相信:把矩陣分解成 A = Q R(正交矩陣 Q 乘上三角矩陣 R,用 QR 分解),再把兩個因子以對調的順序乘回去,形成 A_1 = R Q。重複。令人驚訝的是,這串矩陣會邁向上三角形式,而特徵值就出現在對角線上。
為什麼對調因子會有用?注意 A_1 = R Q = Q^T (Q R) Q = Q^T A Q,這是一個相似變換——所以 A_1 與 A 有完全相同的特徵值,只是在一個旋轉後的基底下表達。每次疊代就是一次這樣的正交基底變換,而神奇之處在於:這些特定的旋轉會逐步揭露特徵值——次對角元素縮向零,矩陣變成(分塊)三角,其對角元素即為特徵值。深層原因是:QR 演算法其實是在同時對每個特徵向量偷偷跑冪法(與反冪法),以正交化的形式進行——最大的特徵值安定到左上角,最小的安定到右下角。
三個工程上的點睛讓它實用,合起來就是 LAPACK 中真正使用的演算法。第一,先一次性把 A 化為海森堡形式(對稱則三對角),使每步 QR 只要 O(n^2) 而非 O(n^3)。第二,使用「移位」(shift):對 A - sigma I 而非 A 運作,把 sigma 選在某特徵值附近(瑞利商移位或維爾金森移位),讓相關次對角元素以二次甚至三次的速度崩塌。第三,「縮減」(deflate):一旦某個次對角元素小到可忽略,就把那個特徵值分離出來,縮小作用中的矩陣。有了移位與縮減,求出每一個特徵值的總成本約為 O(n^3),而且因為每一步都是正交相似變換,整個過程向後穩定。
取列為 (2, 1) 與 (1, 2) 的 A。做 QR 分解:A = Q R。形成 A_1 = R Q;它的非對角元素已變小,對角元素也向 3 與 1 移動。幾次疊代後(加上移位收斂快得多),矩陣在捨入誤差內基本上就是 diag(3, 1)——特徵值直接從對角線讀出,累乘的 Q 各欄就是特徵向量。
反覆分解 A = Q R 再重組 R Q,是一個相似變換步驟,把矩陣推向三角形式。
「素樸」(無移位)的 QR 演算法只線性收斂,且在大小相等的特徵值上可能停滯;實際使用的版本一律帶移位與縮減,對實矩陣還用隱式雙重移位(Francis)步驟,以不動用複數算術就處理共軛複數對。這裡的 Q 是每步的正交因子,不是固定矩陣。