中点法

応用数学、特に数値計算における中点法（ちゅうてんほう、英: midpoint method）は、一段階法（one-step method）による常微分方程式 y ′ ( t ) = f ( t , y ( t ) ) , y ( t 0 ) = y 0 {\displaystyle y'(t)=f(t,y(t)),\quad y(t_{0})=y_{0}} の数値解析的な解法の一つである。 陽的中点法（explicit midpoint method）は以下の公式に基づく。 y n + 1 = y n + h f ( t n + h 2 , y n + h 2 f ( t n , y n ) ) ( 1 e ) {\displaystyle y_{n+1}=y_{n}+hf\left(t_{n}+{\frac {h}{2}},y_{n}+{\frac {h}{2}}f(t_{n},y_{n})\right)\qquad \qquad (1e)} 陰的中点法（implicit midpoint method）は以下の公式に基づく。 y n + 1 = y n + h f ( t n + h 2 , 1 2 ( y n + y n + 1 ) ) ( 1 i ) {\displaystyle y_{n+1}=y_{n}+hf\left(t_{n}+{\frac {h}{2}},{\frac {1}{2}}(y_{n}+y_{n+1})\right)\qquad \qquad (1i)} ここで n = 0 , 1 , 2 , … {\displaystyle n=0,1,2,\dots } 、 h {\displaystyle h} はステップ幅（step size）と呼ばれる微小量、 t n = t 0 + n h {\displaystyle t_{n}=t_{0}+nh} 、また y n {\displaystyle y_{n}} は算出された y ( t n ) {\displaystyle y(t_{n})} の近似値。陽的中点法は修正オイラー法（modified Euler method）としても知られる。陰的中点法は最も単純な選点法であり、ハミルトン力学におけるシンプレクティック積分法に応用される。 この手法の名称は、上掲の公式において傾きを与える関数 f {\displaystyle f} の値が、 y ( t ) {\displaystyle y(t)} が既知の点 t n {\displaystyle t_{n}} と未知の（これから算出したい）点 t n + 1 {\displaystyle t_{n+1}} との中点 t = t n + h / 2 = t n + t n + 1 2 {\displaystyle t=t_{n}+h/2={\frac {t_{n}+t_{n+1}}{2}}} において計算されることに由来する。 幾何学的に解釈することで直感的な理解がしやすくなるかもしれない（上掲の図を参照）。基本的なオイラー法では、曲線の ( t n , y n ) {\displaystyle (t_{n},y_{n})} での接線を f ( t n , y n ) {\displaystyle f(t_{n},y_{n})} から計算し、次の値 y n + 1 {\displaystyle y_{n+1}} を接線と垂線 t = t n + 1 {\displaystyle t=t_{n+1}} との交点から求める。しかし、2階微分が t n {\displaystyle t_{n}} と t n + 1 {\displaystyle t_{n+1}} の間で常に正、または（上掲の図のように）常に負であれば、曲線は接線から逸れ続けて h {\displaystyle h} の増大とともに誤差は拡大する。この図からは、この区間においては中点における接線（上側の緑色の線分）のほうが、ほとんどいつもより正確な曲線の近似となることが見てとれる。この接線は、まず元のオイラー法を使って中点での y ( t ) {\displaystyle y(t)} を推定し、次に f {\displaystyle f} から傾きを計算することで求まる。この改良された接線を使って y n {\displaystyle y_{n}} から y n + 1 {\displaystyle y_{n+1}} の値が計算される（図中の赤色の弦）。中点での y ( t ) {\displaystyle y(t)} の推定に誤差が伴うため、赤色の弦は正確には緑色の線分（真の接線）と平行ではないことに注意する。 中点法における各ステップでの局所的な誤差は O ( h 3 ) {\displaystyle O\left(h^{3}\right)} であり、大域的な誤差は O ( h 2 ) {\displaystyle O\left(h^{2}\right)} となる。このように、中点法はオイラー法と比べて数値計算的に強力でありながら、 h → 0 {\displaystyle h\to 0} のときの誤差の収束は一般的により速い。 中点法は、ルンゲ＝クッタ法として知られるより高次の手法の一クラスである。 中点法はオイラー法 y n + 1 = y n + h f ( t n , y n ) {\displaystyle y_{n+1}=y_{n}+hf(t_{n},y_{n})} を改良したものであり、手順も類似している。 オイラー法を導く鍵は近似式 y ( t + h ) ≈ y ( t ) + h f ( t , y ( t ) ) ( 2 ) {\displaystyle y(t+h)\approx y(t)+hf(t,y(t))\qquad \qquad (2)} であり、これは傾きの公式 y ′ ( t ) ≈ y ( t + h ) − y ( t ) h ( 3 ) {\displaystyle y'(t)\approx {\frac {y(t+h)-y(t)}{h}}\qquad \qquad (3)} と y ′ = f ( t , y ) {\displaystyle y'=f(t,y)} に注意することで得られる。 中点法の場合、(3) をより正確な y ′ ( t + h 2 ) ≈ y ( t + h ) − y ( t ) h {\displaystyle y'\left(t+{\frac {h}{2}}\right)\approx {\frac {y(t+h)-y(t)}{h}}} で置き換える。すると (2) は次の式に変わる。 y ( t + h ) ≈ y ( t ) + h f ( t + h 2 , y ( t + h 2 ) ) ( 4 ) {\displaystyle y(t+h)\approx y(t)+hf\left(t+{\frac {h}{2}},y\left(t+{\frac {h}{2}}\right)\right)\qquad \qquad (4)} この式を使って y ( t + h ) {\displaystyle y(t+h)} を求めることはできない。なぜなら y {\displaystyle y} の t + h / 2 {\displaystyle t+h/2} での値が分からないからである。そのため、ちょうどオイラー法で y ( t + h / 2 ) {\displaystyle y(t+h/2)} を求めるのと同じように、テイラー展開を使って y ( t + h 2 ) ≈ y ( t ) + h 2 y ′ ( t ) = y ( t ) + h 2 f ( t , y ( t ) ) {\displaystyle y\left(t+{\frac {h}{2}}\right)\approx y(t)+{\frac {h}{2}}y'(t)=y(t)+{\frac {h}{2}}f(t,y(t))} と近似する。これを (4) に代入すると y ( t + h ) ≈ y ( t ) + h f ( t + h 2 , y ( t ) + h 2 f ( t , y ( t ) ) ) {\displaystyle y(t+h)\approx y(t)+hf\left(t+{\frac {h}{2}},y(t)+{\frac {h}{2}}f(t,y(t))\right)} のように陽的中点法 (1e) の公式が得られる。 陰的中点法 (1i) は、ステップの中間点 t + h / 2 {\displaystyle t+h/2} での値を y ( t ) {\displaystyle y(t)} と y ( t + h ) {\displaystyle y(t+h)} とを結ぶ線分の中点 y ( t + h 2 ) ≈ 1 2 ( y ( t ) + y ( t + h ) ) {\displaystyle y\left(t+{\frac {h}{2}}\right)\approx {\frac {1}{2}}{\bigl (}y(t)+y(t+h){\bigr )}} で近似し、 y ( t + h ) − y ( t ) h ≈ y ′ ( t + h 2 ) ≈ k = f ( t + h 2 , 1 2 ( y ( t ) + y ( t + h ) ) ) {\displaystyle {\frac {y(t+h)-y(t)}{h}}\approx y'\left(t+{\frac {h}{2}}\right)\approx k=f\left(t+{\frac {h}{2}},{\frac {1}{2}}{\bigl (}y(t)+y(t+h){\bigr )}\right)} とすることで得られる。 y n + h k {\displaystyle y_{n}+h\,k} で y ( t n + h ) {\displaystyle y(t_{n}+h)} を近似すると陰的ルンゲ＝クッタ法 k = f ( t n + h 2 , y n + h 2 k ) y n + 1 = y n + h k {\displaystyle {\begin{aligned}k&=f\left(t_{n}+{\frac {h}{2}},y_{n}+{\frac {h}{2}}k\right)\\y_{n+1}&=y_{n}+h\,k\end{aligned}}} が得られるが、前半部分はステップ幅を h / 2 {\displaystyle h/2} とした後退オイラー法を含んでいる。 陰的中点法では時間についての対称性から h {\displaystyle h} の偶数乗の局所誤差項は全てキャンセルし、誤差は自動的に O ( h 3 ) {\displaystyle O\left(h^{3}\right)} となる。 k {\displaystyle k} の決定を後退オイラー法ではなく（前進）オイラー法で行うと、再び陽的中点法が得られる。 区分求積法 ホイン法（英語版） リープ・フロッグ法 ベレの方法