矩陣分解與應用
條件數(condition number)
條件數是一個單一數字,它告訴你當資料帶有微小誤差時(而真實資料總是帶誤差),A*x = b 的答案有多可信。條件數小、接近 1,說明問題很乖:b 的微小抖動只會引起答案 x 的微小抖動。條件數大則警告你:極小的輸入誤差可能放大成結果中的巨大波動,這種情形稱為病態(ill-conditioned)。
最乾淨的定義來自 SVD:條件數是最大奇異值與最小奇異值之比,kappa = sigma_max / sigma_min。當最小奇異值接近零時,矩陣接近奇異(幾乎不可逆),這個比值就會爆炸,因為矩陣在某個方向上幾乎不拉伸空間,於是反過來求解就會極大地放大任何誤差。
有一點必須說清楚:條件數大是問題本身的屬性,而不是你軟體裡的 bug。再聰明的演算法也無法徹底拯救一個病態系統,因為這種敏感性已經刻進矩陣本身。實際的教訓是:留意條件數,並在可能時重新表述問題,讓它保持較小。
kappa(A) = sigma_max / sigma_min (large kappa => nearly singular, ill-conditioned)
若 kappa 約為 10^6,預期答案大約會損失 6 位精度。
條件數大是問題本身的屬性,不是換個更好的演算法就能徹底解決的。
又稱
另見