Odeソルバ,の選択
常微分方程式
“常微分方程式”(ODE)には,1つの独立変数tに対する従属変数yの導関数が1つ以上含まれます。Tは通常,時間を表します。yの t に対す導関数を表すためにここで使用される表記法は、1 次導関数は , 2次導関数は などのようになります。ODEの“次数”は方程式におけるyの最高次の導関数に等しくなります。
たとえば,これは2次odeです。
“初期値問題”でodeの解を求めるには初期状態から開始します。初期条件 および解の取得対象期間 を使用して,解を反復的に求めます。各ステップで,ソルバ,は前のステップの結果に対して特定のアルゴリズムを適用します。このような最初のステップでは,積分を進めるために必要な情報が初期状態によって提供されます。最終的な結果として,odeソルバ,はタ,etc,ムステップのベクトル と,各ステップでの対応する解 を返します。
Odeのタescプ
MATLAB®のodeソルバでは次のタプの1次odeの解を求めます。
形式の陽的ode。
形式の線形陰的なode。ここで, は正則な質量行列です。この質量行列は時間または状態に依存するか,定数行列になります。線形陰的なODEでは,yの1次導関数の線形結合が使用されます。これらは質量行列にエンコ,ドされます。
線形陰的なodeは陽的な形式 に常に変換できます。》、《ただしソルバーに対して質量行列を直接指定すると,不便で計算量の多いこの変換を回避できます。
の一部の要素が欠けている場合,この方程式は“微分代数方程式”(dae)と呼ばれます。大系には“代数変数”がいくか含まれます。代数変数は従属変数で,方程式にはその導関数がありません。DAE系を等価な1次颂歌系として書き換えるには,この方程式を微分して代数変数を除外します。Daeをodeとして書き換えるために必要な導関数の数は微分指数と呼ばれます。
ode15s
ソルバ,とode23t
ソルバでは指数が1のdaeの解を求めることができます。形式の完全陰的なode。完全陰的な ODE は陽的な形式に書き換えることができません。また、代数変数がいくつか含まれることがあります。
ode15i
ソルバ,は完全陰的な問題を対象に設計されています。指数が1のdaeもその対象に含まれます。
関数odeset
を使用してオプション構造体を作成すると,一部のタイプの問題ではソルバーに追加情報を指定することもできます。
ODE系
解を求める連立odeの方程式の数はいくでも指定できます。原則として,方程式の数は利用できるコンピュ,タ,メモリのみによって制限を受けます。方程式系にn個の方程式があるとします。
この場合,方程式をエンコ,ドする関数はn個の要素をもベクトルを返し,それは の値に対応します。たとえば,次の2を含む方程式系にいて考えます。
これらの方程式をエンコ,ドする関数は次のようになります。
函数dy = myODE(t,y) dy(1) = y(2);Dy (2) = y(1)*y(2)-2;结束
高次ode
Matlab odeソルバ,では1次方程式の解のみを求めることができます。高次odeは汎用の置き換え方法を使用して等価な 1 次の方程式系に書き換えなければなりません。
これらの置き換えの結果は,次のようなn個の1次方程式系になります。
たとえば,次のような3次odeにいて考えます。
次のような置き換えを使用します。
この結果,等価な1次方程式系は次のようになります。
この方程式系のコ,ドは次のようになります。
函数Dydt = f(t,y) Dydt (1) = y(2);Dydt (2) = y(3);Dydt (3) = y(1)*y(3)-1;结束
複素数ode
次の複素数ode方程式にいて考えます。
ここで です。この解を求めるには,実数部と虚数部を別々の解の要素に分けてから,最後にその結果を再結合します。概念的には次のようになります。
たとえば,odeが の場合,関数ファ。
函数f = complexf(t,y) f = y.*t + 2*i;结束
この場合,実数部と虚数部を分けるコ,ドは次のようになります。
函数fv = imaginaryODE(t,yv)由实部和虚部构造yY = yv(1) + i*yv(2);计算函数Yp = complexf(t,y);在不同的分量中返回实数和虚数Fv = [real(yp);图像放大(yp)];结束
解を取得するためのソルバ,を実行すると,初期条件y0
も実数部と虚数部に分けられ,解の要素それぞれに対して初期条件が提供されます。
Y0 = 1+i;Yv0 = [real(y0);图像放大(y0)];Tspan = [0 2];[t,yv] = ode45(@imaginaryODE, tspan, yv0);
解を取得したら,実数部と虚数部の両方の要素を結合して最終結果を得ます。
Y = yv(:,1) + i*yv(:,2);
基本的なソルバ,選択
Odeのほとんどの問題には数值
の実行が適しているため,通常はまずこのソルバ,を選択してください。ただし,精度に関する要件が緩い場合または厳しい場合は,ode23
、ode78
、ode89
,およびode113
が数值
よりも効率的なことがあります。
Odeの一部の問題では,“スティッフ性”が見られる場合,まり,評価が困難な場合があります。スティッフとは明確な定義が難しい用語ですが、一般的には、問題中のいずれかの部分でスケールに差があるときにスティッフになります。たとえば、時間スケールに大幅な違いがあると変化する解の要素が ODE に 2 つある場合、その方程式はスティッフな可能性があります。ノンスティッフ ソルバー (数值
など)で問題の解を求められない場合や極端に処理が遅い場合は,その問題はスティッフであると判定できます。ノンスティッフソルバ,の処理が非常に遅いことがわかった場合は,代わりにode15s
などのスティッフソルバ,を使用してみてください。スティッフソルバを使用する場合、ヤコビ行列やそのスパース パターンを渡すことによって信頼性と効率性を高めることができます。
次の表に,さまざまなソルバーをそれぞれどのような場合に使用すればよいかについての一般的なガイダンスを示します。
ソルバ | 問題のタ@ @プ | 精度 | 使用時 |
---|---|---|---|
数值 |
ノンスティッフ | 中 | ほとんどの場合に使用します。まず |
ode23 |
低 | 粗い許容誤差が設定された問題や中程度のスティッフがある問題では, |
|
ode113 |
低から高 | 厳しい許容誤差が設定された問題やode関数の計算に時間がかかるような問題では, |
|
ode78 |
高 | 精度に関する要件が高い滑らかな解の問題では, |
|
ode89 |
高 | 積分の時間間隔が長い場合や許容誤差が特に厳しい場合など,非常に滑らかな問題では, |
|
ode15s |
スティッフ | 低から中 |
|
ode23s |
低 | 粗い許容誤差が設定された問題では,
質量行列がある場合,これは定数でなければなりません。 |
|
ode23t |
低 |
|
|
ode23tb |
低 |
|
|
ode15i |
完全陰的 | 低 | 完全陰的な問題f (t、y, y ') = 0の場合や指数1の微分代数方程式(DAE)の場合は, |
各ソルバをどのような場合に使用すればよいかの詳細と追加推奨事項にいては,[5]を参照してください。
Odeの例とファescルの概要
ODEのほとんどの問題に対して開始点として効果的に使用できるサンプルファイルがいくつかあります。[微分方程式の例]アプリでは例を簡単に参照したり実行したりできます。このアプリを実行するには,次のように入力します。
odeexamples
個々のサンプルファesc escルを編集用に開くには,次のように入力します。
编辑exampleFileName.m
例を実行するには,次のように入力します。
exampleFileName
次の表に,利用可能な颂歌およびDAEのサンプルファイルと,それらで使用されているソルバーおよびオプションのリストを示します。例のサブセットがドキュメンテ,ションでも直接公開されている場合は,リンクを記載しています。
サンプルファ@ @ル | 使用されているソルバ | オプション指定 | 説明 | ドキュメンテ,ションリンク |
---|---|---|---|---|
amp1dae |
ode23t |
|
スティッフなdae -定数の特異質量行列を使用した電気回路 |
トランジスタのスティッフな微分代数方程式の求解 |
ballode |
ode23 |
|
簡単な▪▪ベント検出問題—跳ねるボ▪▪ル |
Odeのescベント検出 |
batonode |
数值 |
|
時間と状態に依存した質量行列をもode—バトンの運動 |
空中に投げられたバトンの動きを表す方程式の求解 |
brussode |
ode15s |
|
スティッフな大規模問題-化学反応の拡散作用(布鲁塞尔) |
スティッフodeの求解 |
burgersode |
ode15s |
|
状態量に強く依存した質量行列をもつ颂歌——移動メッシュ法を使って汉堡の方程式を解く |
状態依存の強い質量行列によるodeの求解 |
fem1ode |
ode15s |
|
時変の質量行列をも |
- - - - - - |
fem2ode |
ode23s |
|
定質量行列をも |
- - - - - - |
hb1ode |
ode15s |
- - - - - - | 非常に長い区間で解くスティッフなODE問題-罗伯逊化学反応 |
- - - - - - |
hb1dae |
ode15s |
|
保存則下でのスティッフで線形陰的なDAE -罗伯逊化学反応 |
罗伯逊問題を半陽的な微分代数方程式(DAE)として求解 |
ihb1dae |
ode15i |
|
スティッフで完全陰的なDAE -罗伯逊化学反応 |
ロバトソンの問題を陰的微分代数方程式(dae)として求解 |
iburgersode |
ode15i |
|
陰的ODE系-汉堡の方程式 |
- - - - - - |
kneeode |
ode15s |
|
非負の制約をも“膝盖問題” |
非負のodeの解 |
orbitode |
数值 |
|
高度なesc escベント検出問題-制約付きの3体問題 |
Odeのescベント検出 |
rigidode |
数值 |
- - - - - - | ノンスティッフな問題-外力のない剛体のオラ方程式 |
ノンスティッフodeの求解 |
vdpode |
ode15s |
|
パラメ、タ、化したファンデルポ、ルの方程式(μが大きいときスティッフ) |
スティッフodeの求解 |
参照
[1]夏皮恩,L. F.和M. K.戈登,常微分方程的计算机解法:初值问题,W. H.弗里曼,旧金山,1975。
[2] Forsythe, G., M. Malcolm,和C. Moler,数学计算的计算机方法,Prentice-Hall,新泽西,1977。
[3] Kahaner, D., C. Moler,和S. Nash,数值方法和软件,Prentice-Hall,新泽西,1989。
[4]夏皮恩,李丽芳,常微分方程的数值解,查普曼和霍尔,纽约,1994。
[5] Shampine, L. F.和M. W. Reichelt,“MATLAB ODE套件”SIAM期刊科学计算,Vol. 18, 1997, pp. 1-22。
[6]香波,L. F.,格拉德威尔,I.和S.汤普森,用MATLAB求解颂歌,剑桥大学出版社,英国剑桥,2003年。