next up previous
Next: 計算結果の視覚化 Up: シミュレーションの基礎 Previous: 非線形プラント

積分のまとめ

以下にMATXに存在する全ての積分関数の書式を載せます。
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種類に分けることが出来ます。

Hybridを使う際に入力などの計算のためにdiff_eqs()の中に 式を書くことが正しいかという点については,次のように考えることが出 来ます。

link_eqs()の中でオイラー積分,あるいはルンゲクッタ法関数を使う 積分を書く事と,diff_eqs()にその微分方程式を書いてしまう事の本 質的な違いは,積分誤差をどこまで正確に見積もっているかどうかという 点だけです。どちらに書いていても,Hybridを使うことで入力が一 定ということについてはシミュレーション出来るわけです。

したがって,速度的な面からも一番良いものは

  Ode45HybridAuto()
でしょう。ただし,一概に断定できるものでもなく,全ての積分関数のア ルゴリズムを理解して自分のシミュレーションに適切なものを選ぶことが 重要なのは言うまでもありません。具体的な例については11 節で述べます。

Masanobu KOGA 平成11年9月20日