矩陣範數與擾動

條件數

條件數告訴你一個問題在任何演算法執行之前會把誤差放大多少。對於求解 A x = b,它回答:若資料 b 抖動一個很小的相對量,答案 x 的相對抖動最大能有多大?條件數小意味著問題寬容、良態;大則意味著脆弱、病態。

形式上 kappa(A) = ||A|| ||A^-1||,使用所選的範數。在 2-範數下它變為最大奇異值與最小奇異值之比 kappa_2(A) = sigma_max / sigma_min,這讓幾何變得生動:它就是 A 產生的橢球有多扁。按慣例 kappa(A) >= 1,而正交矩陣達到完美的 kappa_2 = 1。

主導不等式是:x 的相對誤差 <= kappa(A) 乘以 b 的相對誤差。所以若 kappa(A) = 10^6 而你的資料精確到六位,答案可能一位都不準。接近奇異的矩陣其 sigma_min 接近零,||A^-1|| 爆炸,條件極差。

關鍵在於:條件是問題的性質,而非你程式碼的性質。一個完美的、後向穩定的演算法仍救不了病態系統——前向誤差等於條件數乘以後向誤差。正確的應對是重新表述問題(正則化、重新縮放、選取更好的座標),而不是去追求更多的小數位。

A = [1, 1; 1, 1.0001]: kappa_2(A) ~ 4.0 x 10^4

兩列幾乎平行使矩陣接近奇異;b 的微小改變會讓 x 劇烈擺動。

雙精度下的粗略經驗法則:若 kappa(A) 約為 10^d,求解 A x = b 時大約會損失 16 位有效數字中的 d 位。當 kappa = 10^16 時答案可能純屬雜訊。

又稱
kappa(A)conditioning of a problem