List rngkut4(Real t, Matrix x, Matrix dx(), Matrix u, Real dt) List Ode(Real t0, Real t1, Matrix x, Matrix dx(), Matrix input(), real h, Real dtsav) List OdeAuto(Real t0, Real t1, Matrix x, Matrix dx(), Matrix input(), Real eps, Real dtsav) List OdeHybrid(Real t0, Real t1, Real dt, Matrix x, Matrix dx(), Matrix input(), Real h, Real dtsav) List OdeHybridAuto(Real t0, Real t1, Real dt, Matrix x, Matrix dx(), Matrix input(), Real eps, Real dtsav); List rkf45(Real t, Matrix x, Matrix dx(), Matrix u, Real dt) List Ode45(Real t0, Real t1, Matrix x, Matrix dx(), Matrix input(), Real h, Real dtsav) List Ode45Auto(Real t0, Real t1, Matrix x, Matrix dx(), Matrix input(), Real eps, Real dtsav) List Ode45Hybrid(Real t0, Real t1, Real dt, Matrix x, Matrix dx(), Matrix input(), Real h, Real dtsav) List Ode45HybridAuto(Real t0, Real t1, Real dt, Matrix x, Matrix dx(), Matrix input(), Real eps, Real dtsav)ではどの関数を使うべきでしょうか?
大きく分けて次の2種類に分けることが出来ます。
link_eqs()の中でオイラー積分,あるいはルンゲクッタ法関数を使う 積分を書く事と,diff_eqs()にその微分方程式を書いてしまう事の本 質的な違いは,積分誤差をどこまで正確に見積もっているかどうかという 点だけです。どちらに書いていても,Hybridを使うことで入力が一 定ということについてはシミュレーション出来るわけです。
したがって,速度的な面からも一番良いものは
Ode45HybridAuto()でしょう。ただし,一概に断定できるものでもなく,全ての積分関数のア ルゴリズムを理解して自分のシミュレーションに適切なものを選ぶことが 重要なのは言うまでもありません。具体的な例については11 節で述べます。