數值線性代數
數值穩定性
計算結果出錯可能有兩種不同的原因,把它們分開很有價值。其一是問題本身:有些問題無論誰來解都會放大任何輸入誤差(這就是病態問題)。其二是演算法:笨拙的方法會給本來良好的問題平添誤差。數值穩定性是演算法的屬性,衡量它額外引入了多少誤差。
前向誤差問的是顯而易見的問題:計算結果 x-hat 與真實答案 x 相差多遠,以 ||x-hat - x|| / ||x|| 度量?後向誤差問的則更微妙:x-hat 恰好是哪個鄰近問題的精確解?若一個演算法總能返回某個與原問題僅相差極小相對量(約為機器精度量級)的問題的精確解,則稱它是後向穩定的。
後向穩定性之所以是黃金標準,正因為它既可達成又有意義。你通常無法保證前向誤差小——那取決於條件性,超出了演算法的掌控。但你往往能保證演算法所做的,不過是把資料輕微擾動了一下。兩者由一條經驗法則聯繫起來:前向誤差 <~ 條件數 乘以 後向誤差。
所以,當一個演算法是後向穩定的而你的答案仍然很糟時,錯不在演算法——是問題病態。這是數值線性代數的核心診斷。帶選主元的高斯消元、基於 Householder 反射的 QR、以及對稱 QR 特徵求解器都是後向穩定的;這正是它們值得信賴的原因。
forward error <~ cond(A) * backward error
把三個概念聯繫起來的經驗法則:即使後向誤差極小,大的條件數也能使前向誤差暴漲。
後向穩定的演算法仍可能給出大錯特錯的答案——如果問題病態的話。穩定性說的是演算法盡了本分;條件性說的是問題盡了本分。兩者都要檢查。
又稱
另見