常微分方程的數值方法

捨入誤差與截斷誤差

每個數值答案都是錯的,而且它出於兩個你絕不能混淆、截然不同的原因而錯。一個來自「方法」:用直線步取代平滑曲線、用有限公式取代極限、丟掉泰勒項。另一個來自「機器」:電腦無法精確儲存大多數數,所以每一次算術運算都把結果捨入到固定位數。前者是截斷誤差;後者是捨入誤差;而當你細化時,它們往相反方向拉扯。

精確地說,截斷誤差是離散化誤差——真解與精確的方法公式在完美算術下會給出的值之間的落差。它隨你把步長 h 變小而「縮小」,對 p 階方法像 h^p。捨入誤差是有限浮點精度(標準雙精度約 16 位有效數字)累積的效果;每一步加上一點微小的捨入,而關鍵在於這個貢獻隨 h 縮小而「成長」,因為較小的步意味著更多步、更多捨入要累積,也因為相減幾乎相等的數會喪失精度。總誤差約為截斷(像 h^p 下降)加上捨入(隨 h 下降而上升)。

這個權衡為數值解能有多準確設下一個硬性、誠實的下限。當你縮小 h 時,總誤差下降——由截斷主導——直到你抵達一個最佳步長;在那以下,捨入接管,總誤差又開始上升。把 h 推得比那一點更小,會讓你的答案「變壞」而非變好,同時耗費遠多的計算。這正是為何沒有數值解是精確的,也是為何「乾脆用更小的步」並非萬靈丹。一個好的實踐者知道兩種誤差都存在、大致知道最佳點在哪、且絕不信任方法與機器無法誠實支撐的位數。

在 [0, 1] 上用雙精度尤拉法解 y' = y:h = 0.1 時誤差由截斷主導(約 0.12);把 h 縮到約 10^(-8) 仍持續改善,但在那以下,數十億次加法帶來的捨入接管,誤差又開始攀升。存在一個最佳 h,再小反而有害。

截斷隨 h 下降、捨入上升——總誤差有一個下限。

更小的 h 不一定更準確。低於最佳步長後捨入主導,縮小 h 反而更糟——一個值得拋棄的錯誤觀念是「只要把 h 取得夠小,我就能達到任意準確度」。

又称
rounding errordiscretization error舍入誤差離散化誤差