有限差分近似(finite-difference approximation)
電腦無法真正求導數——它沒有「無窮小步長」的概念。因此用數值方法解任何偏微分方程的第一步,就是把每個導數換成機器真正算得出來的東西:把鄰近兩點的值相減,再除以它們之間的小距離。先佈下一張間距為 h 的網格,只在這些格點上存放未知函數 u,然後用 u 從一個格點到下一個格點的變化量,來近似某點的斜率 u_x。
具體而言有三種自然的選擇。前向差分用右邊的點:u_x(x) 近似於 (u(x+h) - u(x)) / h。後向差分用左邊的點:(u(x) - u(x-h)) / h。中央差分則跨在該點兩側:(u(x+h) - u(x-h)) / (2h)。對於二階導數,標準的中央公式是 u_xx(x) 近似於 (u(x+h) - 2 u(x) + u(x-h)) / h^2——三個相鄰的值,以 1、-2、1 加權,再除以 h^2。時間導數也以同樣方式處理,時間步長通常寫成 k 或 dt。把這些公式代入偏微分方程,原本的微分方程就變成一組連結各格點值的純代數方程。
這些近似並不等於導數——它們與導數相差一個小誤差,而這個誤差會隨 h 變小而縮小。前向與後向公式是一階精度(誤差正比於 h),而中央公式是二階精度(誤差正比於 h^2),這正是中央差分在適用時較受青睞的原因。這個差距確切的大小與行為就是截斷誤差,而控制它正是整個遊戲的核心:唯有當一個有限差分格式的誤差確實隨網格加密而消失時,它才值得信任。
取 u(x) = x^2,在 x = 1、h = 0.1 處,真正的導數是 2。前向差分給出 (1.21 - 1)/0.1 = 2.1;中央差分給出 (1.21 - 0.81)/0.2 = 2.0,恰好正確。中央公式在此剛好命中,因為 x^2 沒有超過二階的誤差項。
中央差分比單側的前向差分高一個精度階。
縮小 h 會減少截斷誤差,但在真實電腦上,最終會放大捨入誤差——把幾乎相等的微小差值除以一個微小的 h 在數值上很危險,所以存在一個最佳的 h,而非越小越好。