|
|
◆ ylaga()
| void ylaga |
( |
int |
i, |
|
|
int |
n, |
|
|
double |
t, |
|
|
double |
y[], |
|
|
void(*)(int, int, double, double *, int *) |
phi, |
|
|
double |
work[], |
|
|
int |
iwork[], |
|
|
int * |
info |
|
) |
| |
遅延微分方程式の数値解 (5(4)次 ドルマン・プリンス法) (解の後方値の計算)
- 目的
- 本プログラムは, retarda を使って遅延微分方程式の解を求める際に, 解の後方値の補間計算を行うための補助プログラムである.
1階の遅延微分方程式の初期値問題 dy/dt = f(t, y(t), y(t - τ), y(t - τ2), ...), ただし t = t0 において y = y0
において, f は過去の値 y(t - τ), y(t - τ2), ... にも依存する. これらは本プログラムを使って求めることができる.
本プログラムは, 5(4)次 ドルマン・プリンス法プログラム RETARD (文献 (1)) の YLAG を書き直したものである.
- 引数
-
| [in] | i | 求める y の要素番号. (1 <= i <= n または i = 0)
1 <= i <= n の場合: y の i 番目の要素だけを求める.
i = 0 の場合: y の全ての要素 (y[0] 〜 y[n - 1]) を求める. |
| [in] | n | 微分方程式の数. (n >= 1) |
| [in] | t | 独立変数を表す. 例えば, 後方値 y(t - τ) を求めるためには t - τ を与える. |
| [out] | y[] | 配列 y[ly] (ly >= 1 (1 <= i <= n の場合), ly >= n (i = 0 の場合))
t における従属変数の値 (数値解の補間値).
1 <= i <= n の場合: y の i 番目の要素の計算値を y[0] に返す.
i = 0 の場合: y の全ての要素の計算値を y[0] 〜 y[n - 1] に返す. |
| [in] | phi | t < t0 における y を求めるユーザー定義サブルーチンで, 次のように定義すること. void phi(int i, int n, double t, double y[], int *info)
{
y[] = t における y の値 (ただし, t0 - τ < t < t0);
*info = 0;
}
i = 0 であれば全要素を y[0] 〜 y[n - 1] に入れること. i != 0 であれば i 番目の要素を y[0] に入れること. ただし, ユーザーが ylaga を呼び出すときに使う i にだけ対応していればよい. info != 0 を返すと ylaga は終了する. |
| [in] | work[] | 配列 work[*]
制御情報. retarda または retarda_r を呼び出したときに使用した work[] をそのまま渡すこと. |
| [in] | iwork[] | 配列 iwork[*]
整数制御情報. retarda または retarda_r を呼び出したときに使用した iwork[] をそのまま渡すこと. |
| [out] | info | リターンコード.
= 0: 正常終了.
< 0: (-info)番目の入力パラメータの誤り.
= 11: (エラー) 制御情報が正しくない.
= 12: (エラー) t が小さすぎる. retarda の iwork[6] が小さすぎる可能性がある.
= 13: (エラー) t が大きすぎる.
= その他: phi がこの値 (!= 0) を info として返した. |
- 文献
- (1) 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))
|