跳轉到

1970 James Wilkinson —— 數值穩定性的偵探#

「同一道公式,兩個程式算出的答案差了十萬八千里。誰是兇手? 不是運氣,是『捨入誤差』這位連環殺手。」

案件檔案#

項目 內容
得主 James H. Wilkinson (1919–1986)
得獎理由 數值分析的研究,特別是線性計算中的向後誤差分析
關鍵詞 向後誤差分析、QR 分解、條件數

前因#

二戰後英國 ACE 電腦專案中,Wilkinson 負責彈道計算。當時的謎團: 手算時用同一公式都沒問題,為何電腦上結果會崩壞?

兩個嫌疑人浮現:

  1. 捨入誤差(每次運算捨去尾數)
  2. 公式本身的「病態」(ill-conditioning)

線索與推理#

條件數:案件的現場測量#

問題本身的敏感度由條件數 κ 描述:

\[\kappa(A) = \|A\| \cdot \|A^{-1}\|\]
  • κ 小 → 問題良態,誤差不放大
  • κ ≈ 10^k → 大約失去 k 位有效數字(與機器精度 ε 相乘)

這是問題的固有屬性,與用什麼演算法無關。

向後誤差分析:逆轉偵查方向#

Wilkinson 的天才手法:不問「算出來的解離真解多遠」(向前誤差), 而問「算出的解,是不是某個微擾問題的精確解?」

若 Ax = b 的演算法結果 x̂ 滿足
   (A + ΔA) x̂ = b + Δb,   且 ‖ΔA‖/‖A‖ ≤ c·ε
則演算法「向後穩定」。

配合條件數即可界定真正誤差:

\[\frac{\|\hat{x}-x\|}{\|x\|} \lesssim \kappa(A) \cdot c \cdot \varepsilon\]

殺人公式現形#

經典案例:解 \(x^2 - 10^8 x + 1 = 0\) 用求根公式時, \((-b+\sqrt{b^2-4ac})\) 發生災難性相消(catastrophic cancellation): 兩個相近大數相減,有效數字全滅。解法是改寫為 \(x_1 = \frac{1}{2a(-b-\sqrt{b^2-4ac})}\)——同一數學答案,不同的 數值命運。這證明:數學等價 ≠ 數值等價。

此外他將高斯消去改寫為QR 分解(Householder 變換),其向後 誤差界不含平方項條件,穩定性遠優於 LU。

後果#

  • LAPACK、NumPy、MATLAB 的線性代數核心全是 Wilkinson 學派的 穩定演算法。
  • 他的兩卷《The Algebraic Eigenvalue Problem》至今是該領域聖經。
  • 浮點運算標準(IEEE 754, Kahan 1989 案)的哲學基礎——「誤差必須 可分析、可預測」——正是向後誤差分析的延伸。

關聯案件#

→ 1989-William-Kahan與IEEE754浮點標準、1979-Kenneth-Iverson與APL符號程式語言