impl
微分代数方程式
呼出し手順
y = impl([type], y0, ydot0, t0, t [,atol, [rtol]], res, adda [,jac])
引数
- y0,ydot0
実数のベクトルまたは行列 (初期条件).
- t0
実数のスカラー (初期時間).
- t
実数ベクトル (解を計算する時刻).
- res,adda
外部 (関数または文字列またはリスト).
- type
文字列
'adams'
または'stiff'
- atol,rtol
y
と同じ大きさの実数スカラーまたは実数ベクトル.- jac
外部 (関数または文字列またはリスト).
説明
陰的な線形微分方程式の解
A(t,y) dy/dt=g(t,y), y(t0)=y0
t0
は初期時刻, y0
は初期条件,
t0
におけるy
の時間微分
ベクトル ydot0
も指定する必要があります.
入力 res
は,
外部ルーチン ,すなわち,
指定された構文を有する関数,また規定の呼び出し手順を有する
FortranサブルーチンまたはC関数の名前(文字列),
またはリストです.
res
が関数の場合, その構文は
以下のようにする必要があります:
r = res(t,y,ydot)
ただし,t
は,実数ベクトル (時間) そして
y
および ydot
は実数ベクトル
(状態量および状態量の微分)です. この関数は
r=g(t,y)-A(t,y)*ydot
を返す必要があります.
res
が文字列の場合,
FortranサブルーチンまたはC関数の名前を指します.
この例については,
SCI/modules/differential_equations/sci_gateway/fortran/Ex-impl.f
を参照ください.
res
をリストとすることもできます:
odeのヘルプを参照ください.
入力 adda
も外部ルーチンですi.
adda
が関数の場合, その構文は以下のようにする必要があります:
r = adda(t,y,p)
これはr=A(t,y)+p
を返します. ただし,
p
は
A(t,y)
に加算される行列です.
adda
が文字列の場合,
FortranサブルーチンまたはC関数の名前を指します.
この例については,
SCI/modules/differential_equations/sci_gateway/fortran/Ex-impl.f
を参照ください.
adda
をリストとすることもできます:
ode
のヘルプを参照ください.
入力 jac
も外部ルーチンです.
jac
が関数の場合, その構文は以下のようにする必要があります:
j = jac(t,y,ydot)
これは
r=g(t,y)-A(t,y)*ydot
の
y
に関するヤコビアンを返します.
jac
が文字列の場合,
FortranサブルーチンまたはC関数の名前を指します.
この例については,
SCI/modules/differential_equations/sci_gateway/fortran/Ex-impl.f
を参照ください.
jac
をリストとすることも可能です:
odeのヘルプを参照ください.
例
y = impl([1;0;0], [-0.04;0.04;0], 0, 0.4, 'resid', 'aplusp'); // Using hot restart // [x1, w, iw] = impl([1;0;0], [-0.04;0.04;0], 0, 0.2, 'resid', 'aplusp'); // hot start from previous call // x1 = impl([1;0;0], [-0.04;0.04;0], 0.2, 0.4, 'resid', 'aplusp', w, iw); // maxi(abs(x1-x))
参照
Report an issue | ||
<< diff | 微分方程式 | int2d >> |