XLPack 7.0
XLPack 数値計算ライブラリ (C API) リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ 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]phit < 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))