微分方程式微分方程式
オイラー法; Euler Method

概要
オイラー法とは微分方程式の数値解法の一つ。ホイン法やルンゲクッタ法と比べ誤差が大きいため特に理由がない限り使われることはない。

微分方程式と初期状態が以下に与えられるとき、 $$ \frac{d v}{d t} = f(t, v), \quad v(t_0) = v_0 $$
オイラー法では\(t\)の刻み幅を\(h=t_{n+1}-t_n\)としたとき、\(v_n\)の次状態\(v_{n+1}\)を以下として算出する。 $$ \begin{eqnarray} v_{n+1} &=& v_n + h f(t_n, v_n) \end{eqnarray} $$
ソースコード

namespace ODEs {

    /// <summary>オイラー法</summary>
    public class EulerMethod : ODEsMethod{

        /// <summary>コンストラクタ</summary>
        /// <param name="v0">初期値</param>
        /// <param name="diff_func">微分方程式</param>
        /// <param name="diff_t">時間刻み幅</param>
        public EulerMethod(double v0, Func<double, double, double> diff_func, double diff_t) : base(v0, diff_func, diff_t) { }
        
        /// <summary>次状態に更新</summary>
        public override void Reflash() {
            V += DiffT * diff_func(T, V);
            T += DiffT;
        }
    }

    /// <summary>オイラー法 連立方程式</summary>
    public class SEulerMethod : SODEsMethod{

        /// <summary>コンストラクタ</summary>
        /// <param name="v0">初期値</param>
        /// <param name="diff_func">微分方程式</param>
        /// <param name="diff_t">時間刻み幅</param>
        public SEulerMethod(Vector v0, Func<double, Vector, Vector> diff_func, double diff_t) : base(v0, diff_func, diff_t) { }
        
        /// <summary>次状態に更新</summary>
        public override void Reflash() {
            V += DiffT * diff_func(T, V);
            T += DiffT;
        }
    }
}

関連項目
微分方程式数値解法 基本クラス
微分方程式数値解法の比較

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