條件數、穩定性與向後誤差分析
數值穩定性(numerical stability)
兩位廚師照同一份食譜(同一個問題)做菜,卻用不同的技法(不同的演算法)。一種技法把每個量測上的小失誤都放大成毀掉的菜餚;另一種則寬容得多,就算手抖也能做出好成品。數值穩定性就是這種「技法」——演算法——的品質,它讓浮點運算中無可避免的小捨入誤差,不至於滾雪球般膨脹成一個被毀掉的答案。
穩定性是演算法的性質,刻意與條件性對比,後者是問題的性質。黃金標準的形式是向後穩定:算出的答案,是「與所提問題相距僅在捨入距離內」之問題的精確解。較弱但仍有用的形式是混合向前向後穩定:算出的答案,幾乎就是某個鄰近問題的精確解。統一的觀念是,穩定的演算法不會把捨入誤差放大到超過問題本身條件性已強制的程度;它幾乎不額外添加自己的誤差。
關鍵而誠實的一點:穩定性是準確答案的必要條件,但非充分條件。完美穩定的演算法用在病態問題上,仍會回傳糟糕的結果,因為準確度等於條件性乘以穩定性,而條件性那個因子可能巨大無比。反過來,不穩定的演算法能單憑己力毀掉一個簡單的良態問題。所以你想要一個穩定演算法,以確保自己沒把事情弄得更糟——但你必須另外檢查條件性,才能知道答案是否可信。
求解 A x = b 時,先算出顯式反矩陣 A^{-1} 再乘以 b,比起用 LU 求解既較不穩定又較昂貴;建議的路線——帶部分樞紐選擇的 LU 加回代——是向後穩定的,也正是 LAPACK 所採用的。
同一個問題,兩種演算法——只有一種拿得到穩定性印章。
穩定性談的是演算法,條件性談的是問題;別把兩者混為一談。穩定的方法不會讓病態問題變準確。
又稱
另見