/* -*- MaTX -*- * * 【名前】 * Ode45() - RKF45法で常微分方程式を解く * * 【形式】 * {T,X} = Ode45(t0,t1,x0,diff_eqs) * Array T,X,U; * Real t0,t1; * Matrix x0; * Matrix diff_eqs(t,x,u); (Real t; Matrix x,u;) * * {T,X,U} = Ode45(t0,t1,x0,diff_eqs,link_eqs) * Array T,X,U; * Real t0,t1; * Matrix x0; * Matrix diff_eqs(t,x,u); (Real t; Matrix x,u;) * Matrix link_eqs(t,x); (Real t; Matrix x;) * * {T,X,U} = Ode45(t0,t1,x0,diff_eqs,link_eqs,h) * Array T,X,U; * Real t0,t1; * Matrix x0; * Matrix diff_eqs(t,x,u); (Real t; Matrix x,u;) * Matrix link_eqs(t,x); (Real t; Matrix x;) * Real h; * * {T,X,U} = Ode45(t0,t1,x0,diff_eqs,link_eqs,h,dtsav) * Array T,X,U; * Real t0,t1; * Matrix x0; * Matrix diff_eqs(t,x,u); (Real t; Matrix x,u;) * Matrix link_eqs(t,x); (Real t; Matrix x;) * Real h,dtsav; * * 【機能説明】 * {T,X} = Ode45(t0,t1,x0,diff_eqs)は,関数diff_eqs()で定義される * 常微分方程式を RKF45 法を使い,きざみ幅 h = 4.0E-2 で解き,状態の * 時系列 X と時間の系列 T を返す。各時刻における打ち切り誤差の * オーダーは h^6 である。 * * {T,X,U} = Ode45(t0,t1,x0,diff_eqs,link_eqs)は,関数 link_eqs() の * 計算結果を外部信号 u として,関数 diff_eqs() に渡しながら,常微分 * 方程式を解き,状態の時系列 X,外部信号の時系列 U,時間の系列 T を * 返す。 * * Ode45(t0,t1,x0,diff_eqs,link_eqs,h)は,きざみ幅 h で常微分方程式を * 解く。 * * Ode45(t0,t1,x0,diff_eqs,link_eqs,h,dtsav)は,保存するデータの間隔を * dtsav 以上にし,データを間引く。 * * 引数の意味を次に示す。 * * t0 : 初期時刻 * t1 : 終端時刻 * x0 : 初期状態 * diff_eqs(t,x,u) : 時刻 t,状態 x,外部信号 u から * : 状態の微分を計算 * link_eqs(t,x) : 時刻 t,状態 x から外部信号を計算する * h : きざみ幅 * dtsave : データ保存の最小間隔 * * 【例題】 * ユーザーズマニュアル参照。 * * 【関連項目】 * rkf45(), Ode45Auto(), Ode45Hybrid(), Ode45HybridAuto() */