Mathematics    

例題:ODE 初期値問題ソルバの適用

この節では、MATLAB の中で解くことのできる種々の種類の例題を示しています。

例題:単純なノンスティッフ問題

rigidodeは、ノンスティッフソルバに対して、Krogh [6]により提唱された標準テスト問題の解を示します。

ODEs は、外力のない剛体の Euler 方程式です。

ユーザの便利さのため、すべての問題は、一つの M ファイルで定義され、解かれます。微分方程式は、サブ関数fとしてコード化されています。ode45 ソルバは、出力引数なしでコールすると、デフォルトの出力関数odeplotが使われて、解成分をプロットします。この例題を実行するには、コマンドラインで、単にrigidodeをタイプしてください。

この例題をMATLAB Help ブラウザから実行するには、デモ名をクリックしてください。他の方法としては、コマンドラインで、rigidode と入力してください。

例題:スティッフな問題 (van der Pol 方程式)

vdpodeは、例題:van der Pol 方程式、 µ = 1000 (Stiff)の中で記述されている van der Pol方程式を示します。微分方程式

は、定数パラメータを含んでいます。

この問題は、が増加すると、よりスティッフになり、振動の周期が長くなります。1000 を超える場合、方程式は、過減衰になり、問題は強いスティッフ性を示します。リミットサイクルは、解の要素がゆっくり変化する部分と問題が非常にスティッフな部分を含んでいます。すなわち、スティッフでない部分と急激に変化する部分が交互に生じます。

デフォルトでは、スティッフな問題に対して使用するODE suite の中のソルバは、Jacobian 行列を数値的に近似します。しかし、ここの例題では、サブ関数J(t,y,mu) を与えて、 = muに対して、(t,y)で、Jacobian行列を解析的に計算します。解析的なJacobianの使用は、積分の信頼性と効率を向上します。

MATLAB Helpブラウザから、この例題を実行するには、デモ名をクリックする、コマンドラインで、vdpode と入力してください。コマンドラインで、vdpodeへの引数として、の値を指定することができます。デフォルトは、 = 1000です。

例題:有限要素離散化

fem1odeは、偏微分方程式の有限要素離散からの結果の ODE 問題の解を示します。fem1ode(N)の中のNの値は、離散化をコントロールするもので、求まる結果の方程式は、N個の方程式から構成されます。デフォルトは、N = 19 です。

この例題は、質量行列を含んでいます。ODEs のシステムは、偏微分方程式のライン解法から求まります。

初期条件 と境界条件を使います。整数が選択され、と定義されます。そして、偏微分方程式の解は、k = 0, 1, ..., N+1 に対して、 で、つぎの式

によって、近似されます。ここで、は、で1、すべての他ので0である区分的線形関数です。Galerkin 離散化は、つぎの ODEs システムを導きます。

三角行列 は、つぎの関係があります。

初期値は、偏微分方程式に対して、初期条件から求まります。問題は、時間間隔で解かれます。

fem1odeの中で、プロパティ

は、問題が の型をしていることを示しています。サブ関数 A(t,N)は、時変質量行列を計算し、R は、定数のJacobian になります。

MATLAB Help ブラウザからこの例題を実行するには、デモ名をクリックするか、コマンドラインで、fem1ode と入力してください。コマンドラインで、fem1odeの引数として、の値を設定することができます。デフォルトは、 = 19です。

例題 :大規模、スティッフなスパース行列

brussodeは、(ポテンシャル的に)大規模なスティッフスパース問題の解を示します。問題は、古典的な"Brusselator"システム[2] で、化学反応の拡散モデルです。

は、時間間隔[0,10]で、 = 1/50 とで

と共に解かれます。システム内には、個の方程式が存在し、方程式が、であるように順序付けられている場合、Jacobian は、制約幅 5をもつ帯域になります。

brussode(N) をコール中、パラメータN 2がグリッド点の数を設定するのに使います。ここで、N は、 に対応します。結果のシステムは、2N個の方程式から構成されます。デフォルトでは、N20です。問題は、Nが大きくなると、スティッフ性が強くなり、Jacobian のスパース性が増大することです。

サブ関数F(t,y,N) は、Brusselator 問題用の微係数ベクトルを出力します。サブ関数 jpattern(N)は、Jacobian の中の非ゼロの位置を示す10のスパース行列を出力します。デフォルトでは、スティッフな ODE ソルバは、フル行列として、数値的な Jacobian を生成します。プロパティJPattern は、ソルバが Jacobian をスパース行列として、数値的に生成するために使われるスパースパターンをもったソルバを与えるために使われます。スパースパターンを与えると、Jacobian を作成するために必要な関数計算の回数が著しく減り、シミュレーションが速くなります。Brusselator 問題に対して、スパース性が与えられなければ、関数の 2N 回の計算が、2N 行 2N 列の Jacobian 行列を計算するために必要となります。スパース性が、与えられた場合、N の値に関わらず、四つの計算のみが必要です。

MATLAB Help ブラウザからこの例題を実行するには、デモ名をクリックするか、コマンドラインで、brussode と入力してください。コマンドラインで、brussodeへの引数として、 の値を設定することができます。デフォルトは、 = 20です。

例題:単純イベント位置検出問題

ballode は、バウンドするボールの運動をモデル化します。この例題は、ODE ソルバがイベントの生じる位置を検出する機能を示すものです。

バウンドするボールの方程式は、つぎのように表せます。

この例題で、イベント関数は、サブ関数eventsでコード化されています。

ここで、つぎの値を出力します。

-1
負の方向のみのゼロ交点を検出
0
すべてのゼロ交点の検出
1
正の方向のみのゼロ交点を検出

value, isterminal, directionの長さは、event 関数の数と同じになります。各ベクトルの i 番目の要素は、i 番目の関数に対応します。より進んだイベントの発生位置を検出する例題は、例題 :アドバンスなイベント位置検出問題を参照してください。

ballodeの中で、Eventsプロパティを@events に設定することは、ボールが落ちる途中(direction = -1)で、ボールが地面にヒットした(高さ y(1)0になる)とき、シミュレーションを停止(isterminal = 1) することになります。それで、例題では、バウンドするボールに対応する初期条件を付けて、積分を再スタートします。

この例題を、MATLAB Help ブラウザから実行するには、デモ名をクリックするか、コマンドラインで、ballodeと入力してください。

例題:アドバンスなイベント位置検出問題

orbitodeは、ノンスティッフな問題に対して使用するソルバに対する標準テストの解を示します。これは、月の周りを回り、地球に戻ってくる宇宙船の軌跡を示すものです(Shampine and Gordon [6], p.246)。

orbitode問題は、4つの方程式を解きます。

ここで、つぎのようにします。

最初の2つの解要素は、無限小の質量の座標系で、他のものに対してプロットしたものが、他の2つの物体の周りを回る軌跡になります。初期条件は、軌跡が周期性をもつように選択されます。 の値は、宇宙船が月の周りを回り、地球に戻るように設定します。中程度の厳密さをもったトレランスが、軌跡の質的に高い挙動を再生するために必要となります。適切な値は、RelTol1e-5で、AbsTol1e-4です。

eventsサブ関数は、スタート点から最大の距離をもつ点の位置を示すイベント関数と宇宙船が、スタート点に戻る時刻を含むものです。積分に使われるステップサイズが大きくて、イベントの位置を決定できない場合でさえ、イベントの正確な位置を割り出すことに注意してください。この例題で、ゼロクロッシングの方向を決定する機能は、クリティカルなものです。初期の点と最大距離の点として出力される点は共に、同じイベント関数値をもち、クロッシングの方向は、それらを区別するために使われます。

MATLAB Help ブラウザからこの例題を実行するには、デモ名をクリックするか、コマンドラインで、orbitode と入力してください。この例題は、出力関数 odephase2 を使って、2次元の位相平面プロットを作成し、積分の進行状況を見ることができます。

例題:微分代数方程式

hb1daeは、hb1odeデモを微分代数方程式(DAE)問題として作り替えたものです。hb1ode デモの中でコード化されている Robertson 問題は、スティッフな ODE 問題を解くコードに対する古典的なテスト問題です。

hb1odeで、問題は、初期条件, , をもち、定常状態で解かれます。これらの微分方程式は、線形保存則を満足し。DAE として問題を再定式化するのに使います。

明らかに、これらの方程式は、和が1にならない要素をもつに対する解をもっていません。

をもつの型に問題は、あります。

は明らかに正則でなく、hb1dae は、ソルバに伝えません。ソルバは、問題が ODE ではなく、DAE であることを識別します。同様に、整合性をもつ初期条件は明らかになりますが、例題では、使い、整合性のある初期条件の計算を示しています。

MATLAB Help ブラウザからこの例題を実行するには、デモ名をクリックするか、コマンドラインに、hb1dae と入力してください。hb1daeは、つぎの特徴をもっています。


  ODE ソルバ性能の改良 質問と回答とトラブルシュート