微分方程式微分方程式
微分方程式数値解法 基本クラス

概要
各種微分方程式数値解法クラスに継承される。

ソースコード

namespace ODEs {
    /// <summary>微分方程式(Ordinary Differential Equations)数値解法基本クラス</summary>
    public abstract class ODEsMethod {
        protected readonly Func<double, double, double> diff_func;

        /// <summary>コンストラクタ</summary>
        /// <param name="v0">初期値</param>
        /// <param name="diff_func">微分方程式</param>
        /// <param name="diff_t">時間刻み幅</param>
        public ODEsMethod(double v0, Func<double, double, double> diff_func, double diff_t) {
            if(diff_t <= 0 || double.IsInfinity(diff_t) || double.IsNaN(diff_t)) {
                throw new ArgumentException(nameof(diff_t));
            }
            if(diff_func == null) {
                throw new ArgumentNullException(nameof(diff_func));
            }

            this.diff_func = diff_func;
            this.DiffT = diff_t;

            Initialize(v0);
        }

        /// <summary>時間</summary>
        public double T { get; protected set; }

        /// <summary>時間刻み幅</summary>
        public double DiffT { get; }

        /// <summary>状態値</summary>
        public double V { get; protected set; }

        /// <summary>次状態に更新</summary>
        public abstract void Reflash();

        /// <summary>初期化</summary>
        /// <param name="v0">初期値</param>
        public void Initialize(double v0) {
            T = 0;
            V = v0;
        }
    }

    /// <summary>連立微分方程式(Simultaneous Ordinary Differential Equations)数値解法基本クラス</summary>
    public abstract class SODEsMethod {
        protected readonly Func<double, Vector, Vector> diff_func;

        /// <summary>コンストラクタ</summary>
        /// <param name="v0">初期値</param>
        /// <param name="diff_func">微分方程式</param>
        /// <param name="diff_t">時間刻み幅</param>
        public SODEsMethod(Vector v0, Func<double, Vector, Vector> diff_func, double diff_t) {
            if(diff_t <= 0 || double.IsInfinity(diff_t) || double.IsNaN(diff_t)) {
                throw new ArgumentException(nameof(diff_t));
            }
            if(v0 == null) {
                throw new ArgumentNullException(nameof(v0));
            }
            if(diff_func == null) {
                throw new ArgumentNullException(nameof(diff_func));
            }

            this.diff_func = diff_func;
            this.DiffT = diff_t;

            Initialize(v0);
        }

        /// <summary>時間</summary>
        public double T { get; protected set; }

        /// <summary>時間刻み幅</summary>
        public double DiffT { get; }

        /// <summary>状態値</summary>
        public Vector V { get; protected set; }

        /// <summary>次状態に更新</summary>
        public abstract void Reflash();

        /// <summary>初期化</summary>
        /// <param name="v0">初期値</param>
        public void Initialize(Vector v0) {
            T = 0;
            V = (Vector)v0.Clone();
        }
    }
}

関連項目
ベクトルクラス

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