logo

有限差分法 📂数値解析

有限差分法

定義1 2

有限差分法finite difference method, FDMは、微分係数を計算する数値的方法で、短い間隔での平均変化率で微分係数を近似するものである。

説明

公式導出の核心は、テイラー展開だ。

$$ f(x+h) = f(x) + f^{\prime}(x)h + \dfrac{f^{\prime \prime}(x)}{2!}h^{2} + \dfrac{f^{\prime \prime \prime}}{3!}h^{3} + \cdots \tag{1} $$

導関数だけが左辺に来るように整理すると、

$$ \begin{align*} f^{\prime}(x) &= \dfrac{f(x+h) - f(x)}{h} + \dfrac{f^{\prime \prime}(x)}{2!}h + \cdots \\ &= \dfrac{f(x+h) - f(x)}{h} + \mathcal{O}(h) \\ &\approx \dfrac{f(x+h) - f(x)}{h} \end{align*} $$

ここで、$\mathcal{O}(h)$は漸近記号だ。$h$が十分に小さい場合、右辺は左辺をかなりよく近似するだろう。実際、微分や加速度を初めて学ぶとき、平均変化率の極限として説明されることが多い。

導関数

前進差分

$x$での微分係数を$x$と次のタイムステップ$x+h$の平均変化率で近似することを前進差分という。誤差項は$\mathcal{O}(h)$だ。

$$ f^{\prime}(x) \approx \dfrac{f(x+h) - f(x)}{h} $$

後退差分

$x$での微分係数を$x$と前のタイムステップ$x-h$の平均変化率で近似することを後退差分という。誤差項は$\mathcal{O}(h)$だ。

$$ f^{\prime}(x) \approx \dfrac{f(x) - f(x-h)}{h} $$

中央差分

中央差分は、前の二つの方法と違って、誤差項が$\mathcal{O}(h^{2})$である。$(1)$で$h$の代わりに$\pm\frac{h}{2}$を代入すると、

$$ f(x+h/2) = f(x) + f^{\prime}(x)\frac{h}{2} + \dfrac{f^{\prime \prime}(x)}{2!}\left(\frac{h}{2}\right)^{2} + \dfrac{f^{\prime \prime \prime}(x)}{3!}\left(\frac{h}{2}\right)^{3} + \cdots $$

$$ f(x-h/2) = f(x) - f^{\prime}(x)\frac{h}{2} + \dfrac{f^{\prime \prime}(x)}{2!}\left(\frac{h}{2}\right)^{2} - \dfrac{f^{\prime \prime \prime}(x)}{3!}\left(\frac{h}{2}\right)^{3} + \cdots $$

上の式から下の式を引くと、

$$ f(x+h/2) - f(x-h/2) = f^{\prime}(x)h + 2\dfrac{f^{\prime \prime \prime}(x)}{3!}\left(\frac{h}{2}\right)^{3} + \cdots $$

$f^{\prime}(x)$について整理すると、

$$ \begin{align*} f^{\prime}(x) &= \frac{f(x+h/2) - f(x-h/2)}{h} + \dfrac{f^{\prime \prime \prime}(x)}{3!}\left(\frac{h}{2}\right)^{2} + \cdots \\ &= \frac{f(x+h/2) - f(x-h/2)}{h} + \mathcal{O}(h^{2}) \\ &\approx \frac{f(x+h/2) - f(x-h/2)}{h} \end{align*} $$

二階導関数

$(1)$と$(1)$に$h$の代わりに$-h$を代入した二つの式を足すと、次のようになる。

$$ \begin{align*} && f(x+h) &= f(x) + f^{\prime}(x)h + \dfrac{f^{\prime \prime}(x)}{2!}h^{2} + \dfrac{f^{\prime \prime \prime}}{3!}h^{3} + \cdots \\ {+} && f(x-h) &= f(x) - f^{\prime}(x)h + \dfrac{f^{\prime \prime}(x)}{2!}h^{2} - \dfrac{f^{\prime \prime \prime}}{3!}h^{3} + \cdots \\ \hline && f(x+h) + f(x-h) &= 2f(x) + f^{\prime \prime}(x)h^{2} + 2\dfrac{f^{\prime \prime \prime \prime}}{4!}h^{4} + \cdots \end{align*} $$

$f^{\prime \prime}$について整理すると、

$$ \begin{align*} f^{\prime \prime}(x) &= \frac{f(x+h) - 2f(x) + f(x-h)}{h^{2}} + 2\dfrac{f^{\prime \prime \prime \prime}}{4!}h^{2} + \cdots \\ &= \frac{f(x+h) - 2f(x) + f(x-h)}{h^{2}} + \mathcal{O}(h^{2}) \\ &\approx \frac{f(x+h) - 2f(x) + f(x-h)}{h^{2}} \end{align*} $$

誤差項を考慮しなければ、この式は$f^{\prime}$に前進差分法と後退差分法を順に適用して得られるものでもある。

$$ \begin{align*} f^{\prime \prime}(x) &\approx \dfrac{f^{\prime}(x+h) - f^{\prime}(x)}{h} \\ &\approx \dfrac{\dfrac{f(x+h)-f(x)}{h} - \dfrac{f(x)-f(x-h)}{h}}{h} \\ &= \dfrac{f(x+h) - 2f(x) + f(x-h)}{h^{2}} \end{align*} $$

参考


  1. A. Iserles, A First Course in the Numerical Analysis of Differential Equations (2nd, 2009), p139-141 ↩︎

  2. Mykel J. Kochenderfer, Algorithms for Optimization (2019), p23-26 ↩︎