數值微分

3.高階數值微分

若我們要計算\(f (x)\) 的數值二次微分,我們依舊使用泰勒展開式來設計我們的二次差分式,我們將\(f (x+h)\) 與\(f (x-h)\) 對\(f (x)\) 做泰勒展開,為了消除\(f (x)\) 以及\(f'(x)\) 這兩項,我們得到

\(D_{c2}^{(2)}(x,h) = \frac{f(x+h)-2f(x)+f(x-h)}{h^2} = f^{(2)}(x) + \frac{h^2}{12}f^{(4)}(x) + \frac{2h^4}{6!} f^{(6)}(x) + \dots \)

因此,這個差分式的truncation error 是\(O(h^2)\)。

和數值一次微分一樣,我們可以仿造 Richardson's extrapolation 的方式,利用調整 \(h\) 並且配合適當的線性組合把 truncation error 的階次提高,例如

\(D_{c4}^{(2)} = \frac{2^2D_{c2}^{(2)}(x,h) - D_{c2}^{(2)}(x,2h)}{2^2-1} = f^{(2)}(x) -\frac{h^4}{90}f^{(5)}(x)+ \dots \)
這裡我們重新定義差分式的符號表示,\(D_{xn}^{(r)}\) : 這裡的\(x \in \{f,b,c\}\) 分別代表 forward, backward 和 central。 \(n\) 代表 truncation error 的階次,\(r\) 代表是逼近 \(r\) 階的微分。為了方便起見,我們令\(f_k = f(x+kh)\)。

我們應該有一種感覺,要設計一個好的差分式,就是要保留某一個階數的\(f^{(r)}(x)\),然後把\(f(x)\) 到 \(f^{(r-1)}(x)\) 之前的項數消去,並且讓後面的 truncation error 項數越大越好。例如我們想要算\(D_{c4}^{(2)}(x,h)\),因為是 central 的緣故,我們至少要有\(f_1, f_0\) 和\(f_{-1}\) 這三項,但是依過去的經驗,我們知道單使用這三項只能做到\(D_{c2}^{(2)}\),因此我們嘗試補上兩項\(f_2\) 和 \(f_{-2}\)。接下來的問題是對應的係數應該是多少呢?

我們把預期的\(D_{c4}^{(2)}(x,h)\) 的算式寫開

\(D_{c4}^{(2)}(x,h) = c_2 f_2 + c_1 f_1 + c_0 f_0 + c_{-1} f_{-1} + c_{-2} f_{-2}\)
接著把對應的泰勒展開式帶入後,讓這個線性組合可以保留 \(f^{(2)}\),並且刪除 \(f(x), f'(x), f^{(3)}(x)\) 和 \(f^{(4)}(x)\) 項,我們可以得到一個線性方程組。然後就可以得到 \(c_i\) 的係數。對於一般的數值高階微分,我們都可以用同樣的手法來處理。