ルンゲ＝クッタ法
2段2次の方法は1パラメータの自由度 α を持ち、以下のブッチャー配列で与えられる。
対応する公式は
y n + 1 = y n + h ( ( 1 − 1 2 α ) f ( t n , y n ) + 1 2 α f ( t n + α h , y n + α h f ( t n , y n ) ) ) . {\displaystyle y_{n+1}=y_{n}+h{\bigl (}(1-{\tfrac {1}{2\alpha }})f(t_{n},y_{n})+{\tfrac {1}{2\alpha }}f(t_{n}+\alpha h,y_{n}+\alpha hf(t_{n},y_{n})){\bigr )}.}
である。 α = 1 / 2 {\displaystyle \alpha =1/2} の場合が 中点法 (または修正オイラー法, modified Euler method)
y n + 1 = y n + h f ( t n + h 2 , y n + h 2 f ( t n , y n ) ) {\displaystyle y_{n+1}=y_{n}+hf\left(t_{n}+{\frac {h}{2}},y_{n}+{\frac {h}{2}}f(t_{n},y_{n})\right)}
に対応し、以下のブッチャー配列で与えられる。
α = 1 {\displaystyle \alpha =1} の場合は ホイン法(英語版)(または改良オイラー法, improved Euler method)として知られ、ブッチャー配列は以下の通りである。
よって絶対誤差を計算せずに刻み幅を正しく設定することができる。そのアルゴリズムは、大体以下の通りである。
誤差の許容値を δ とする。刻み幅 h の近似値 yn+1 と y *n+1 をルンゲ=クッタ法で計算する。二つの値に対し、 ‖ e n + 1 ‖ ≥ h δ {\displaystyle \|e_{n+1}\|\geq h\delta } が成立するとき、h が大きすぎて小さくする必要がある。よって新しい刻み幅 h ′ = 1 2 h {\displaystyle h'={\frac {1}{2}}h} と設定し再び近似値を計算する。代わりに ‖ e n + 1 ‖ ≤ 1 10 h δ {\displaystyle \|e_{n+1}\|\leq {\frac {1}{10}}h\delta } が成立するとき、h が小さすぎて大きくするほうが効率が良い。よって新しい刻み幅 h ′ = 2 h {\displaystyle h'=2h} と設定し、次の時刻での近似値を計算する(この場合、誤差が許容値より小さいので今の近似値を二度と計算する必要はない)。二つの不等式ともが成立しないとき、そのままの刻み幅で次の時刻での近似値を計算してよい。
ただし、使用したスカラー(1/2他)は方程や方法によって変更することも可能である。また、実践では h を小さくしすぎないようにするため、下界 hmin を先に設定することもある。 h < h m i n {\displaystyle h<h_{\mathrm {min} }} のときにアルゴリズムを停止し、代わりにもっと高い次数を持つ方法を使う。
ここで、ft は f の t に関する偏微分である。それを y n + 1 = y n + h ( b 1 k 1 + b 2 k 2 ) {\displaystyle y_{n+1}=y_{n}+h(b_{1}k_{1}+b_{2}k_{2})} に代入し、 k 1 = f ( t n , y n ) {\displaystyle k_{1}=f(t_{n},y_{n})} を用いて整理すると
y n + 1 = y n + h ( b 1 + b 2 ) f ( t n , y n ) + h 2 b 2 ( c 2 f t ( t n , y n ) + a 21 f ( t n , y n ) f y ( t n , y n ) ) + O ( h 3 ) {\displaystyle y_{n+1}=y_{n}+h(b_{1}+b_{2})f(t_{n},y_{n})+h^{2}b_{2}(c_{2}f_{t}(t_{n},y_{n})+a_{21}f(t_{n},y_{n})f_{y}(t_{n},y_{n}))+O(h^{3})}
となる。同時に、方程式 y ′ ( t ) = f ( t , y ) {\displaystyle y'(t)=f(t,y)} の t に関する微分を取って y' を f(t,y) に置き換えると