next up previous contents
Next: OdeStop Up: リファレンスマニュアル Previous: OdeHybrid

  
OdeHybridAuto

【目的】
OdeHybridAuto - 4次ルンゲクッタ法(自動刻み調節)で常微分方程式を解く (外部信号をサンプリング毎に更新)
【形式】
{T,X,U} = OdeHybridAuto(t0,t1,dt,x0,diff_eqs,link_eqs)
   Array T,X,U;
   Real t0,t1,dt;
   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} = OdeHybridAuto(t0,t1,dt,x0,diff_eqs,link_eqs,eps)
   Array T,X,U;
   Real t0,t1,dt;
   Matrix x0;
   Matrix diff_eqs(t,x,u); (Real t; Matrix x,u;)
   Matrix link_eqs(t,x);   (Real t; Matrix x;)
   Real eps;
  
{T,X,U} = OdeHybridAuto(t0,t1,dt,x0,diff_eqs,link_eqs,eps,
                                                    dtsav)
   Array T,X,U;
   Real t0,t1,dt;
   Matrix x0;
   Matrix diff_eqs(t,x,u); (Real t; Matrix x,u;)
   Matrix link_eqs(t,x);   (Real t; Matrix x;)
   Real eps,dtsav;
  
{T,X,U} = OdeHybridAuto(t0,t1,dt,x0,diff_eqs,link_eqs,eps,
                                              dtsav,dtmin)
   Array T,X,U;
   Real t0,t1,dt;
   Matrix x0;
   Matrix diff_eqs(t,x,u); (Real t; Matrix x,u;)
   Matrix link_eqs(t,x);   (Real t; Matrix x;)
   Real eps,dtsav,dtmin;
  
{T,X,U} = OdeHybridAuto(t0,t1,dt,x0,diff_eqs,link_eqs,eps,
                                        dtsav,dtmin,dtmax)
   Array T,X,U;
   Real t0,t1,dt;
   Matrix x0;
   Matrix diff_eqs(t,x,u); (Real t; Matrix x,u;)
   Matrix link_eqs(t,x);   (Real t; Matrix x;)
   Real eps,dtsav,dtmin,dtmax;
【詳細】
{T,X,U} = OdeHybridAuto(t0,t1,dt,x0,diff_eqs,link_eqs)は,
diff_eqs()で定義される常微分方程式を 4 次のルンゲクッタのアルゴ リズムを使い,各時刻における誤差が eps = 1.0E-6 以下になるよう 刻み幅を自動調節しながら解き,状態の時系列 X,外部信号の時系列 U,時間の系列 T を返す。 サンプリング時間 dt 毎に link_eqs() を呼び出し,diff_eqs() に渡す 外部信号 u を更新する。 刻み幅の最小値は,dtmin = EPS,最大値は dtmax = abs(t1-t0)/5, データ保存の最小間隔は,dtsav = 1.0E-3 である。刻み幅を dtmin に しても,誤差が eps 以下にならない場合,警告メッセージを表示し, 次の時刻へ進む。 OdeHybridAuto(t0,t1,dt,x0,diff_eqs,link_eqs,eps)は,各時刻における 誤差が eps になるよう刻み幅を調節しながら常微分方程式を解く。 OdeHybridAuto(t0,t1,dt,x0,diff_eqs,link_eqs,eps,dtsav)は,保存する データの間隔を dtsav 以上にし,データを間引く。 OdeHybridAuto(t0,t1,dt,x0,diff_eqs,link_eqs,eps,dtsav,
dtmin)は,刻み幅の最小値を dtmin にする。 OdeHybridAuto(t0,t1,dt,x0,diff_eqs,link_eqs,eps,dtsav,
dtmin,dtmax)は,刻み幅の最大値を dtmax にする。 引数の意味を次に示す。
t0:初期時刻
t1:終端時刻
x0:初期状態
diff_eqs(t,x,u):時刻 t,状態 x,外部信号 u から状態の
  微分を計算
link_eqs(t,x):時刻 t,状態 x から外部信号を計算する
eps:各時刻の打ち切り誤差の最大値
dtsave:データ保存の最小間隔
dtmin:刻み幅の最小値
dtmax:刻み幅の最大値
【例題】
ユーザーズマニュアル参照。
【参照】
rngkut4(2.182), Ode(2.143), OdeAuto(2.148), OdeHybrid(2.149)

next up previous contents
Next: OdeStop Up: リファレンスマニュアル Previous: OdeHybrid
Masanobu KOGA 平成11年10月2日