|
|
◆ Ylag_r()
| Sub Ylag_r |
( |
I As |
Long, |
|
|
T As |
Double, |
|
|
RCont() As |
Double, |
|
|
ICont() As |
Long, |
|
|
YY As |
Double, |
|
|
IRev As |
Long |
|
) |
| |
遅延微分方程式の初期値問題 (5(4)次 ドルマン・プリンス法) (リバースコミュニケーション版) (解の後方値の補間)
注 - 本プログラムは次バージョンで廃止予定です.
- 目的
- 本ルーチンは, Retard_r を使って遅延微分方程式の初期値問題の解を求めるためおよび密出力を行うために解の後方値を補間により求める補助ルーチンである.
- 引数
-
| [in] | I | 求める解の要素番号. (0 <= I <= N - 1) |
| [in] | T | 補間値を求める T の値.
T は利用可能な過去のステップの範囲内になければならない. そうでない場合には 0 を返し, Retard_r が Info = 14 で終了する. どれだけさかのぼった時点の値を求めることができるかは確保する作業メモリ量に依存し, Retard_r を呼び出すときの RCont() の大きさ(LRCont)で決まる. |
| [in] | RCont() | 配列 RCont(LRCont - 1) (LRCont >= Mxst*(5*Nrdens)
解の後方値のための制御情報.
Retard_r で使用したものを変更せずにそのまま入力すること. |
| [out] | ICont() | 配列 ICont(LICont - 1) (LICont >= Nrdens)
解の後方値のための制御情報.
Retard_r で使用したものを変更せずにそのまま入力すること. |
| [in,out] | YY | [in] IRev = 1: T における Y(I) の値を YY に入れて再呼び出しをする (ただし, t0 - τ <= T <= t0 となっている). Ylag における Phi の役割をし, 初期値よりも遅延量だけ前までの関数値を定義する. 微分方程式の定義において遅延を含む関数値を必要としない要素については IRev = 1 で戻ることはない.
[out] IRev = 0: T における解の補間値 Y(I). |
| [in,out] | IRev | リバースコミュニケーションの制御変数
[in] 最初の呼び出し時に 0 に設定しておくこと. 2回目以降の呼び出し時には値を変更してはならない.
[out] 0 以外の場合, 下記処理を行いIRevを変更せずに再び本ルーチンを呼び出すこと.
= 0: 処理終了.
= 1: T における Y(I) の値を YY に与える. |
- 出典
- E. Hairer, S.P. Norsett and G. Wanner, "Solving Ordinary Differential Equations. Nonstiff Problems. 2nd edition", Springer Series in Computational Mathematics, Springer-Verlag (1993)
邦訳: 「常微分方程式の数値解法Ⅰ 基礎編」スプリンガージャパン (2007)
- 使用例
- y(t - τ) を求める.
ただし, I は要素の番号(0 〜 N - 1), また T = t - τ である. RCont() および ICont() は変更せずに渡す. IRev = 0 のときに YY に結果が入る.
t0 - τ <= T <= t0 (ただし, t0 は t の初期値) であれば IRev = 1 で戻るので, T における Y(I) の値を YY に与える. IRev = 0
Do
Call Ylag_r(I, T, RCont(), ICont(), YY, IRev)
If IRev = 1 Then YY = Tにおける Y(I) の値 (ただし, t0 - τ <= T <= t0)
Loop While IRev <> 0
Sub Ylag_r(I As Long, T As Double, RCont() As Double, ICont() As Long, YY As Double, IRev As Long) 遅延微分方程式の初期値問題 (5(4)次 ドルマン・プリンス法) (リバースコミュニケーション版) (解の後方値の補間)
|