dsolve/numeric/lsode - 常微分方程式の数値解を求める
使い方
dsolve(odesys, numeric, method=lsode)
dsolve(odesys, numeric, method=lsode[choice], vars, options)
dsolve(numeric, method=lsode[choice], procopts, options)
パラメータ
odesys - 集合またはリスト ; 常微分方程式および初期条件
numeric - 名前 ; dsolve に数値解を要求します
method=lsode - method=lsode を指定 ; 数値解法として使用します
method=lsode[choice] - 方程式 ; 数値解法と共に使用する副解法の指定
vars - ( オプション ) odesys に現れる従変数、または従変数の集合かリスト
options - ( オプション ) keyword = value 形式の方程式
procopts - 連立常微分方程式に用いる手続きの指定オプション (procedure, initial, start, number, procvars のいずれか。 ) 。詳細は dsolve[numeric,IVP] をご参照ください。
|
説明
|
|
•
|
オプションに numeric および method=lsode または method=lsode[choice] を指定した dsolve コマンドは、Livermore の硬い常微分方程式に対する解法 (Livermore Stiff ODE solver) を用いて数値解を求めます。デフォルトでは以下で定義されている adamsfunc が選択されています。
|
•
|
lsode 法と共に使用する副解法の 選択 (choice) は、adamsfunc, adamsfull, adamsdiag, adamsband, backfunc, backfull, backdiag, backband の中から一つ選ぶことができます。
|
|
アダムス型公式 (Adams Method) に基づく解法を指定します。
|
|
後退差分公式 (backward differentiation formulas) に基づく解法を指定します。
|
|
反復関数を使用します (ヤコビ行列 (Jacobian) は関わりません。 ) 。
|
|
内部で生成させた完全ヤコビ行列 (full Jacobian) を含んだ反復を使用します。
|
|
内部で生成させた対角化ヤコビ行列 (diagonal Jacobian) の近似を含んだ反復を使用します。
|
|
内部で生成させた帯行列のヤコビ行列 (banded Jacobian) を含んだ反復を使用します。
|
•
|
もし、選択 (choice) が adamsband か backband のどちらかであるならば、ユーザは (ヤコビ行列の帯幅を指定するために ) オプションの方程式に mu と ml の集合を ctrl=array に指定しなければなりません。詳細は dsolve[lsode,advanced] をご参照ください。
|
•
|
infolevel[`dsolve/lsode`] あるいは infolevel[dsolve] を 2 と設定することで、最後の格子点の評価の情報には誤差が含まれます。
|
•
|
以下のオプションは、lsode 形式をベースとする解法で使用することができます。:
|
'output' = keyword or array
'known' = name or list of names
'number' = integer
'procedure' = procedure
'start' = numeric
'initial' = array
'procvars' = list
'startinit' = boolean
'implicit' = boolean
'optimize' = boolean
'abserr' = numeric
'relerr' = numeric
'initstep' = numeric
'minstep' = numeric
'maxstep' = numeric
'maxfun' = integer
|
dsolve の出力形式を指定します。さらに、known オプションはユーザが定義した既知の関数を指定します。詳細は dsolve[numeric] をご参照ください。
|
|
'number', 'procedure', 'start', 'initial', と 'procvars'
|
|
'startinit','implicit', と 'optimize'
|
|
個々のステップと誤差の導入を制御します。誤差は、個々の解の部品 (components) の誤差の荷重付けされた 2 乗平均平方根ノルム (rms-norm) として計算され、うまく実行させるには 1 つ以下を指定してください。デフォルトの値は abserr=Float(1,-7) と relerr=Float(1,-7) となっています。誤差の制御方法と RMS ノルムの使用方法の詳細は dsolve[Error_Control] をご参照ください。
|
|
'initstep', 'minstep', と 'maxstep'
|
|
ステップ幅のより詳細な制御を可能にします。これらのオプションは、dsolve[Error_Control] で説明されているものとなります。デフォルトでは、minstep=0, maxstep=infinity, と initstep が定められています。
|
|
一回の呼び出しで、常微分方程式および連立常微分方程式の評価数の最大値を指定する整数です。この計算量の制限は、全ての個々の呼び出しにおいて実行されます ( 詳細は dsolve[maxfun] をご参照ください。 ) 。このオプションは、手続き型の出力にのみ影響を与えます。デフォルトでは 0 に設定されています。
|
•
|
lsode を使用した解法の振る舞いのより詳細な制御は、部分的な計算を実行する能力を持つ ctrl と itask オプションの使用、ヤコビ行列 (Jacobian) の帯幅の指定、近似度の制御、その他のいろいろ方法で可能となります。これらのオプションは少々複雑であるので、詳細は dsolve[lsode,advanced] をご参照ください。
|
•
|
この計算は lsode の手続きに関する誤差条件に対応するエラーメッセージを返すことになるかもしれません。
|
|
|
例
|
|
>
|
Digits := 10:
deqn1 := {diff(y(x), x$3) = y(x)*diff(y(x), x) - x };
|
| (2.1) |
>
|
init1 := { (D@@2)(y)(1) = 4, D(y)(1) = 3, y(1) = 2.4 };
|
| (2.2) |
>
|
ans1 := dsolve(deqn1 union init1, numeric,
method=lsode[adamsfull]);
|
| (2.3) |
| (2.4) |
>
|
ans2 := dsolve({x*y(x)-sin(y(x))=diff(y(x),x), y(0)=-5.},
numeric, method=lsode);
|
| (2.5) |
| (2.6) |
| (2.7) |
>
|
Digits := 20:
deqn3 := diff(y(x), x$3) - y(x)*x*diff(y(x),x) = 5;
|
| (2.8) |
>
|
init3 := y(0) = 1, (D@@2)(y)(0) = -1, D(y)(0) = 2;
|
| (2.9) |
>
|
ans3 := dsolve({deqn3, init3}, numeric,
method=lsode[backdiag],
output=array([0.5,0.75,1]));
|
| (2.10) |
|
|
参照
|
|
dsolve[classical], dsolve[dverk78], dsolve[Error_Control], dsolve[gear], dsolve[lsode,advanced], dsolve[maxfun], dsolve[numeric], dsolve[numeric,IVP], dsolve[rkf45], dsolve[rosenbrock], dsolve[Stiffness], dsolve[taylorseries], plots[odeplot]
|
|
参考文献
|
|
|
Hindmarsh, Alan C.; Stepleman, R. S.; et al. (eds.) Odepack, a Systemized Collection of ODE Solvers. North-Holland, Amsterdam, 1983.
|
|
|