Dsl (Digital Simulation Library) for .Net

前の章 (計算順序の決定) までで計算順序が決定したので、当然計算を実行します。

このトピックスは以下のセクションを含みます。

非定常計算

時間に関する常微分方程式が含まれる場合「非定常計算」となります。

 コピー イメージコードをコピー
Processor gr = new Processor("Test"); // Processorオブジェクトの作成
.........................................
// 変数の作成と因果関係の定義、および、各変数の属性定義。
.........................................
// グラフ処理によおる計算順序等の決定。
if (gr.DeterminateOrder() == RESULT.OK)
{
    // グラフ処理が成功すれば、シミュレーション計算を開始する。
    //   tStart ... 開始時刻
    //   tEnd   ... 終了時刻
    //   tStep  ... 積分刻み
   gr.Run(tStart, tEnd, tStep);
}
Processor の Run() メソッドは組み立てられた計算順序に従って開始時刻から与えられた積分刻みで終了時刻まで計算を実行します。 「時刻」と言っても計算では単なる double の値です。

チップ:

tStart <= tEnd, tStep > 0.0 であることが普通ですが、 常微分方程式を含まないなら(定常計算) tStep = 0.0 とすることで一度だけ計算して終了することができます。

先頭へ

定常状態計算

常微分方程式は y を <I> 型とすれば y = Integral(z) という形式で定義されます (Integral(z) は z を積分するという意味。z=dy/dt)。 一般に y の初期値から積分を続ければ(定常解があれば)定常状態に達します。 定常状態とは y(積分値) が変化しなくなるということですから、 その時の z(=dy/dt) は 0 であるはずです。 そこで、 y から z に達する計算ルートを見つけて、

  • z を値 0 の<T> 型変数(dy/dt=>0 と微係数は<T>となります)

  • y を z を値 0 にするための<F> 型変数(<I>型変数は><F>型になります)

とすれば、積分を続けなくても特定の時刻(tSteady)における定常状態を直ちに計算することができます。
注意事項:
y (<F> 型) から z (<T>型) に至る計算ルートが無い場合、定常状態は存在しないことになります。
 コピー イメージコードをコピー
// 定常状態を直接計算する(DeterminateOrder の引数を true にする)
//  z = dy/dt だから z = f(y) => 0.0 を y について解く。
if (gr.DeterminateOrder(true) == RESULT.OK)
{
      // 定常状態を計算するグラフ処理が成功すれば、計算を実行する。
     gr.Run(tSteady, tSteady, 0.0);
}
チップ:
Newton法で定常状態を直接計算するので、ある程度解に近い y の初期値が必要です。 しばらく積分をしてから、定常状態計算に移行するのが安全です。

先頭へ

参照

先頭へ