equal_l2’s blog

※記載されている内容の正確性は保証しませんが、間違いを指摘していただければ直します。

常微分方程式の数値解法(3) 中点法

今回も引き続き次のような式の解法を考える。
\def\disp{\displaystyle}\disp\frac{dx}{dt} = f(t,x)

中点法の準備

Euler法の導出と同様のことを、中央差分で行うと、
x_{n+\frac12} = x_{n-\frac12} + f(t_n,x_n)h
添字からマイナスの項を消せば、
\underline{x_{n+1} = x_{n} + f(t_{n+\frac12},x_{n+\frac12})h}\cdots(1)

この式は代数的に処理してx_{n+1}, x_{n}の式にすることはできない。
x_{n+\frac12}を、近似などでx_{n+1}, x_{n}で表される式にしなければならない。

陽的中点法

x_{n+\frac12}テイラー展開を用いれば、
\begin{align}
x_{n+\frac12} &= x(t_n +\frac12 h) \\
&\approx x(t_n) + \frac12 h \frac{dx}{dt}(t_n) \\
&= x(t_n) + \frac12 h f(t_n,x_n)
\end{align}

この結果を上の(1)式へ代入すれば、
\underline{x_{n+1} = x_{n} + f(t_n+\frac12 h,x_n + \frac12 h f(t_n,x_n))h}

陰的中点法

x_{n+\frac12} \approx \frac12 \left( x_n + x_{n+1} \right)
とする。これは、t_n ~ t_{n+1}の間を1次関数であるものとして近似したと考えられる。

これを(1)式へ代入すると、
\underline{x_{n+1} = x_{n} + f(t_n+\frac12 h,\frac12 \left( x_n + x_{n+1} \right))h}

ちなみに、陽的オイラー法で右辺のx_{n+1}を展開すると、陰的中点法は陽的中点法に一致する。

図的イメージ

高さf(t_{n+\frac12},x_{n+\frac12})、幅hの矩形の面積を足し合わせる。
f:id:equal_l2:20150524192345p:plain
誤差がいい具合に消しあうことが多いらしく、精度はオイラー法よりも良い傾向がある。