微分方程式数値解法の比較
概要
オイラー法、ホイン法、ルンゲクッタ(RK4)法の実行サンプルを兼ねた精度比較を行う。
微分方程式と初期状態が以下に与えられるとき、 $$ \frac{d v}{d t} = v, \quad v_0 = 1 $$
\(v(t=1)\)の真値は\(v_0 exp(t=1) = e \approx 2.718281828459045\)である。
ソースコード (ルンゲクッタ(RK4)法の場合)
const int DivTime = 128;
var ode = new RungeKuttaMethod(1, (t, v) => v, 1.0 / DivTime);
using(StreamWriter stream = new StreamWriter("rungekutta.txt")) {
stream.WriteLine("t,v");
stream.WriteLine($"{ode.T},{ode.V}");
for(int i = 0; i < DivTime; i++) {
ode.Reflash();
stream.WriteLine($"{ode.T},{ode.V}");
}
stream.WriteLine($"Error = {Math.Abs(ode.V - Math.E)}");
}
結果
オイラー法
Error = \( 1.05428 \times 10^{-2} \)
ホイン法
Error = \( 2.74901 \times 10^{-5} \)
ルンゲクッタ(RK4)法
Error = \( 8.38409 \times 10^{-11} \)
関連項目
微分方程式数値解法 基本クラス
オイラー法
ホイン法
ルンゲクッタ(RK4)法