主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

ODEソルバーの選択

常微分方程式

“常微分方程式”(ODE)には,1つの独立変数tに対する従属変数yの導関数が1つ以上含まれます。tは通常,時間を表します。yの t に対す導関数を表すためにここで使用される表記法は、1 次導関数は y 2次導関数は y などのようになります。ODEの“次”数は方程式におけるyの最高次の導関数に等しくなります。

たとえば,これは2次颂歌です。

y 9 y

“初期値問題”で颂歌の解を求めるには初期状態から開始します。初期条件 y 0 および解の取得対象期間 t 0 t f を使用して,解を反復的に求めます。各ステップで,ソルバーは前のステップの結果に対して特定のアルゴリズムを適用します。このような最初のステップでは,積分を進めるために必要な情報が初期状態によって提供されます。最終的な結果として,颂歌ソルバーはタイムステップのベクトル t t 0 t 1 t 2 ... t f と,各ステップでの対応する解 y y 0 y 1 y 2 ... y f を返します。

ODEのタイプ

MATLAB®の颂歌ソルバーでは次のタイプの1次颂歌の解を求めます。

  • y f t y 形式の陽的颂歌。

  • t y y f t y 形式の線形陰的な颂歌。ここで, t y は正則な質量行列です。この質量行列は時間または状態に依存するか,定数行列になります。線形陰的な颂歌ではyの1次導関数の線形結合が使用されます。これらは質量行列にエンコードされます。

    線形陰的な颂歌は陽的な形式 y 1 t y f t y に常に変換できます。》、《ただしソルバーに対して質量行列を直接指定すると,不便で計算量の多いこの変換を回避できます。

  • y の一部の要素が欠けている場合,この方程式は“微分代数方程式”(DAE)と呼ばれます。DAE系には“代数変数”がいくつか含まれます。代数変数は従属変数で,方程式にはその導関数がありません。DAE系を等価な1次颂歌系として書き換えるには,この方程式を微分して代数変数を除外します。DAEを颂歌として書き換えるために必要な導関数の数は微分指数と呼ばれます。ode15sソルバーとode23tソルバーでは指数が1のDAEの解を求めることができます。

  • f t y y 0 形式の完全陰的な颂歌。完全陰的な ODE は陽的な形式に書き換えることができません。また、代数変数がいくつか含まれることがあります。ode15iソルバーは完全陰的な問題を対象に設計されています。指数が1のDAEもその対象に含まれます。

関数odesetを使用してオプション構造体を作成すると,一部のタイプの問題ではソルバーに追加情報を指定することもできます。

ODE系

解を求める連立颂歌の方程式の数はいくつでも指定できます。原則として,方程式の数は利用できるコンピューターメモリのみによって制限を受けます。方程式系にn個の方程式があるとします。

y 1 y 2 y n f 1 t y 1 y 2 ... y n f 2 t y 1 y 2 ... y n f n t y 1 y 2 ... y n

この場合,方程式をエンコードする関数はn個の要素をもつベクトルを返し,それは y 1 y 2 ... y n の値に対応します。たとえば,次の2つを含む方程式系について考えます。

y 1 y 2 y 2 y 1 y 2 2

これらの方程式をエンコードする関数は次のようになります。

函数myODE(t,y) = myODE(t,y)dy (2) = y y (1) * (2) 2;

高次的颂歌

MATLAB颂歌ソルバーでは1次方程式の解のみを求めることができます。高次的颂歌は汎用の置き換え方法を使用して等価な 1 次の方程式系に書き換えなければなりません。

y 1 y y 2 y y 3. y y n y n 1

これらの置き換えの結果は,次のようなn個の1次方程式系になります。

y 1 y 2 y 2 y 3. y n f t y 1 y 2 ... y n

たとえば,次のような3次颂歌について考えます。

y y y + 1 0.

次のような置き換えを使用します。

y 1 y y 2 y y 3. y

この結果,等価な1次方程式系は次のようになります。

y 1 y 2 y 2 y 3. y 3. y 1 y 3. 1.

この方程式系のコードは次のようになります。

函数y(1) = y(2);dydt (2) = y (3);dydt (3) = y y (3) (1) * 1;

複素数的颂歌

次の複素数颂歌方程式について考えます。

y f t y

ここで y y 1 + y 2 です。この解を求めるには,実数部と虚数部を別々の解の要素に分けてから,最後にその結果を再結合します。概念的には次のようになります。

y v 真正的 y 图像放大 y f v 真正的 f t y 图像放大 f t y

》、《たとえばが y y t + 2 の場合,関数ファイルを使用してこの方程式を表すことができます。

定义接受并返回复数值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

粗い許容誤差が設定された問題や中程度のスティッフがある問題では,数值よりもode23の方が効率的なことがあります。

ode113 低から高

厳しい許容誤差が設定された問題や颂歌関数の計算に時間がかかるような問題では,数值よりもode113の方が効率的なことがあります。

ode15s スティッフ 低から中

数值が失敗する場合や非効率な場合にその問題がスティッフであることが疑われるときは,ode15sを試してください。ode15sは微分代数方程式(DAE)の解を求める場合にも使用します。

ode23s

粗い許容誤差が設定された問題では,ode15sよりもode23sの方が効率的なことがあります。これによって,ode15sが効率的ではないときに,スティッフな問題の解を求めることができる場合があります。

ode23sでは各ステップでヤコビアンを計算します。そのため,odesetを介してヤコビアンを渡すと,効率性と精度を最大化できるため,高い効果が得られます。

質量行列がある場合,これは定数でなければなりません。

ode23t

ode23tは,問題のスティッフが中程度に留まり,数値的減衰のない解が必要な場合に使用します。

ode23tでは微分代数方程式(DAE)の解を求めることができます。

ode23tb

ode23sと同様に,粗い許容誤差が設定された問題では,ode15sよりもode23tbソルバーの方が効率的なことがあります。

ode15i 完全陰的

完全陰的な問題f (t、y, y ') = 0の場合や指数1の微分代数方程式(DAE)の場合は,ode15iを使用します。

各ソルバーをどのような場合に使用すればよいかの詳細と追加推奨事項については,[5]を参照してください。

ODEの例とファイルの概要

ODEのほとんどの問題に対して開始点として効果的に使用できるサンプルファイルがいくつかあります。(微分方程式の例)アプリでは例を簡単に参照したり実行したりできます。このアプリを実行するには,次のように入力します。

odeexamples

個々のサンプルファイルを編集用に開くには,次のように入力します。

编辑exampleFileName.m

例を実行するには,次のように入力します。

exampleFileName

次の表に,利用可能な颂歌およびDAEのサンプルファイルと,それらで使用されているソルバーおよびオプションのリストを示します。例のサブセットがドキュメンテーションでも直接公開されている場合は,リンクを記載しています。

サンプルファイル 使用されているソルバー オプション指定 説明 ドキュメンテーションリンク
amp1dae ode23t
  • “质量”

スティッフなDAE -定数の特異質量行列を使用した電気回路

トランジスタのスティッフな微分代数方程式の求解
ballode ode23
  • “事件”

  • “OutputFcn”

  • “OutputSel”

  • “完善”

  • “InitialStep”

  • “MaxStep”

簡単なイベント検出問題——跳ねるボール

ODEのイベント検出
batonode 数值
  • “质量”

時間と状態に依存した質量行列をもつ颂歌——バトンの運動

空中に投げられたバトンの動きを表す方程式の求解
brussode ode15s
  • “JPattern”

  • 矢量化的

スティッフな大規模問題——化学反応の拡散作用(Brusselator)

スティッフ颂歌の求解
burgersode ode15s
  • “质量”

  • “MStateDependence”

  • “JPattern”

  • “MvPattern”

  • “RelTol”

  • “AbsTol”

状態量に強く依存した質量行列をもつ颂歌——移動メッシュ法を使って汉堡の方程式を解く

状態依存の強い質量行列による颂歌の求解
fem1ode ode15s
  • “质量”

  • “MStateDependence”

  • 的雅可比矩阵

時変の質量行列をもつスティッフな問題——有限要素法

- - - - - -
fem2ode ode23s
  • “质量”

定質量行列をもつスティッフな問題——有限要素法

- - - - - -
hb1ode ode15s - - - - - -

非常に長い区間で解くスティッフな颂歌問題-罗伯逊化学反応

- - - - - -
hb1dae ode15s
  • “质量”

  • “RelTol”

  • “AbsTol”

  • 矢量化的

保存則下でのスティッフで線形陰的なDAE -罗伯逊化学反応

罗伯逊問題を半陽的な微分代数方程式(DAE)として求解
ihb1dae ode15i
  • “RelTol”

  • “AbsTol”

  • 的雅可比矩阵

スティッフで完全陰的なDAE -罗伯逊化学反応

ロバートソンの問題を陰的微分代数方程式(DAE)として求解
iburgersode ode15i
  • “RelTol”

  • “AbsTol”

  • 的雅可比矩阵

  • “JPattern”

陰的颂歌系——汉堡の方程式

- - - - - -
kneeode ode15s
  • 非负的

非負の制約をもつ“膝盖問題”

非負の颂歌の解
orbitode 数值
  • “RelTol”

  • “AbsTol”

  • “事件”

  • “OutputFcn”

高度なイベント検出問題——制約付きの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。

参考

|

関連するトピック

外部のWebサイト