微分方程式微分方程式
微分方程式数値解法の比較

概要
オイラー法、ホイン法、ルンゲクッタ(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)法

ライブラリライブラリ
確率統計確率統計
線形代数線形代数
幾何学幾何学
最適化最適化
微分方程式微分方程式
画像処理画像処理
補間補間
機械学習機械学習
クラスタリングクラスタリング
パズルゲーム・パズル
未分類未分類