next up previous
Next: RKF45 Up: シミュレーションの基礎 Previous: Hybrid

  
Auto

書式は以下のとおりです。
OdeAuto(Real t0, Real t1, Matrix x, Matrix dx(), 
        Matrix input(), Real eps, Real dtsav)
epsは許容誤差を示します。省略するとeps = 1.0E-6となりま す。Autoがつくと,ルンゲクッタ法のきざみ幅を自動調節してくれ ます。Ode()の説明で積分のきざみ幅の重要性について述べました。き ざみ幅hの値を小さくすれば,解の精度は上がります。逆に,hを大き くすれば概して精度は下がりますが,関数が急激に変化しないところでは hを大きめに取っても解の精度が落ちることは有りません。そこで, 合理的に積分のきざみ幅を選ぶためには,1ステップを積分した時 に生ずる誤差の評価を行なうことです。

きざみ幅の自動調節では,xh進める前に,次の1, 2を行なってhの 値を決定します。

1.
xh/2だけ2回進めたときのyの値をyAiとして, xhだけ1回進めたときのyの値をyBiとすると,

\begin{displaymath}\frac{y^A_i - y^B_i}{y^A_i} \leq \epsilon ~~ (i = 0, 1,2,\cdots)
\end{displaymath}

の判定をします。$\epsilon$は制御定数で正の小さな値であり通常許容誤差を 示します。この条件が満たされるまでhを1/2ずつ小さくしていきます。
2.
xhだけ2回進めたときのyの値をyCiとして, xを2hだけ1回進めたときのyの値をyDiとすると,

\begin{displaymath}\frac{y^C_i - y^D_i}{y^C_i} \leq \epsilon ~~ (i = 0, 1,2,\cdots)
\end{displaymath}

の判定をします。$\epsilon$は制御定数で正の小さな値であり通常許容誤差を 示します。この条件が満たされるまでhを2倍ずつ大きくしていきます。
つまりきざみ幅を決定するためには積分1ステップの間にきざみ幅hの計 算とその半分ずつの計算の最低で3回の計算をすることになります。

積分結果が誤差以内でなかった場合はそのきざみを半分ずつ小さくするた め時間がかかりますが,逆に関数の変化がゆるやかな場合は,きざみを大 きくするので,全体の計算時間は短くなります。また,積分の誤差を完全 に満たしているため信頼度は上がります。


Masanobu KOGA 平成11年9月20日