條件數、穩定性與向後誤差分析

向前誤差(forward error)

這是你天真地最想衡量的誤差:我電腦給出的答案,離真正的答案有多遠?你朝靶心射出一箭;向前誤差就是箭落點到靶心的距離。它是最直觀的準確度概念——但有點違反直覺地,往往最難直接計算,因為要知道真正的答案,你得先擁有它才行。

精確地說,若精確解為 y = f(x),而你的演算法產生了 y-hat,則絕對向前誤差為 ||y-hat - y||,相對向前誤差為 ||y-hat - y|| / ||y||。它衡量的是「輸出」的錯誤程度。把它和向後誤差對比:後者問的是,你得把「輸入」擾動多少,才能讓 y-hat 恰好正確。向前誤差回答「我的答案有多錯?」;向後誤差回答「它是誰的精確答案?」。兩者由主法則相連:向前誤差至多等於條件數乘以向後誤差。

定義整個領域的微妙之處:向前誤差大,不一定就是演算法的錯。若問題病態,即使是完美的(向後穩定的)演算法,也可能產生很大的向前誤差,因為條件數會把微小的向後誤差放大成很大的輸出誤差。所以單看向前誤差,無法告訴你該怪方法還是怪問題;你必須分別檢視向後誤差與條件性,才能正確地分配責任。

求解一個真實解為 x = (1, 1) 的系統,你的程式回傳 x-hat = (1.03, 0.97)。以 2-範數計的相對向前誤差約為 ||(0.03, -0.03)|| / ||(1,1)|| = 0.0424/1.414 ~ 3%——但這 3% 是否該歸咎於你的求解器,完全取決於 kappa(A)。

這是最醒目的數字——但若沒有條件數,就無從詮釋它。

向前誤差在實務上通常無法精確算出(你會需要真正的答案)。它得用估計、用條件數乘以向後誤差來界定上界,或透過殘差間接檢查。

又称
forward-error誤差前向誤差