歐拉法(Euler's method)
/ OY-ler /
多數微分方程的解沒有公式——但我們仍能逐點地數值算出答案。歐拉法是最早也最簡單的這類數值求解器,其他一切方法都由它衍生。其想法近乎稚拙:你知道當前位置,又從方程知道此刻的斜率,於是沿這個方向邁一小步直走,再從新位置重新看斜率,如此反覆。
具體地,要把初值問題 dy/dx = f(x, y)、y(x_0) = y_0 向前推進,選一個小步長 h。從當前點 (x_n, y_n),方程給出斜率 f(x_n, y_n);沿切線走一步落到 y_{n+1} = y_n + h*f(x_n, y_n),並令 x_{n+1} = x_n + h。反覆進行,就把近似解描成一條由小切線段拼成的折線——這正是它也被稱作切線法或折線法的原因。它就是被做成算法的方向場:在每點讀出當地斜率,沿它走。
歐拉法是一切數值解常微分方程的概念基礎,但實踐中它粗糙,你應知道它誠實的局限。它是一階精度的:步長減半只大致把誤差減半,所以高精度要求極小且極多的步。誤差會累積,對某些方程(剛性方程)除非 h 極小,否則方法會失穩。真實軟件用它更聰明的後裔——改進歐拉法(休恩法),尤其是龍格-庫塔方法——它們走更巧的試探步,每步換來高得多的精度。但它們每一個都始於歐拉那一個誠實的想法:沿斜率邁步。
用步長 h = 0.5 解 dy/dx = y、y(0) = 1。第一步:y_1 = 1 + 0.5*1 = 1.5,在 x = 0.5。第二步:y_2 = 1.5 + 0.5*1.5 = 2.25,在 x = 1。真值 e^1 約為 2.718,可見這粗糙的步長明顯偏低——縮小 h 會縮小差距。
每一步都沿當前切線走;步長越小,越貼近真實曲線。
步長越小,截斷誤差越小,但步數增多,捨入誤差隨之累積——存在一個實用下限,再縮小 h 也無濟於事。而且歐拉法只有一階精度;真正幹活時,龍格-庫塔或其他高階格式幾乎總是更恰當的選擇。