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