Mathematics    

初期値問題のソルバ

MATLAB ODEソルバ関数は、 "LSQR: An algorithm for sparse linear equations and sparse least squares," ACM Trans. Math. Soft., Vol.8, 1982, pp. 43-71. ODEs (式 17-1)に対するIVPsを解くために、数値的な積分手法を実行します。初期条件をもつ初期時間から始め、設定した時間区間で、各時間ステップで、解を計算します。時間ステップに関する解が、ソルバの誤差のトレランスの規範を満足している場合、このステップは、うまく処理されています。規範を満足していない場合は、処理が失敗したことになります。そして、ソルバは、時間間隔を小さくして、再度、計算を試みます。

この節では、つぎの事柄を記述しています。

質量行列と DAE プロパティ は、より一般的な問題を解く方法を説明しています。

これらのソルバに対するデモファイルに関する情報と同様に、任意のMATLAB関数に対するシンタックスの情報を、MATLAB Help ブラウザを使って、得ることができます。

ノンステッフな問題に対するソルバ

ノンステッフな問題用に3つのソルバが用意されています。

ode45
は、陽的Runge-Kutta(4,5)式をベースにしたDormand-Prince法です。これは、1段階法ソルバです。の計算は、すぐ前の点での解のみが必要になります。一般に、ode45は、大部分の問題に対して、最初の試みとして適用するのに適切な関数です。
ode23
は、陽的Runge-Kutta(2,3)式をベースにしたBogacki and Shampineによる手法です。粗い許容誤差で計算するときや少しスティッフなシステムの場合、ode45 より有効になることがあります。ode45 と同様にode23は、1段階法ソルバです。
ode113
は、可変次数のAdams-Bashforth-Moulton PECE法ソルバです。厳しい許容誤差設定された問題やODE関数が計算するのに特に時間のかかるような問題では、ode45より効率的です。ode113 は、多段階法ソルバです。すなわち、解を求めるために、以前の数点を使います。

ステッフ問題に対するソルバ

すべての困難な問題は、必ずステッフであると云うことではなく、すべてのスティッフな問題は、そのために専用に設計されていないソルバにとっては困難なものになります。スティッフソルバは、他のソルバと全く同じように使うことができます。しかし、問題に対する付加的な情報を与えることで、スティッフなソルバの効率をかなり高めることができます(ソルバ性能の改良を参照してください)。

スティッフな問題に対して、設計されたソルバが4種類あります。

ode15s
は、可変次数の多段階法に基づく数値微分公式(NDFs)です。オプションとして、通常効率的には下がりますが、後退差分方程式(BDF、Gear法として有名)を使うこともできます。ode113用にode15sも、多段階法ソルバです。問題がスティッフかどうか、または ode45がうまく機能しないか、または効率が悪いなら、ode15sを使ってください。
ode23s
は、2次のRosenbrockの公式を改良したものをベースにしています。これは、単段階法なので、粗い許容範囲ではode15sよりも効率的です。ode15sでは、効率的でないいくつかの種類のスティッフな問題を解くことができます。
ode23t
は、"フリー"の内挿を使って、台形則を実行します。問題が中程度のステッフさをもち、数値的な減衰をもたない解を必要とする場合、このソルバを使ってください。
ode23tb
は、最初の段階で、台形則ステップをもつインスプリットな Runge-Kutta 法を、二番目の段階で、2次の後退微分方程式を使う、TR-BDF2 を実行します。ode23sと同様に、このソルバは、急激なトレランスで、ode15sよりも、より効率的に機能します。

ODEソルバの書式設定法

すべてのODEソルバ関数は、最も適切な手法がはっきりしていなくても種々の数値法を使い易くするために、書式を同じにしています。種々の手法を同じ問題に適用するためには、ODEソルバ関数名を単に変えるだけ十分です。すべてのソルバ関数で共通の最も簡単な記法は、

ここで、solverは、ここまでに説明したODEソルバのうちの一つです。

基本的な入力引数は、つぎのものです。

odefun
ODEシステムを記述するファイルの名前を表す文字列
    dydt = odefun(t,y)
    
ここで、t はスカラ、dydty は列ベクトル
tspan
積分区間を設定するベクトル。ソルバは、tspan(1)で初期条件を設定し、tspan(1)からtspan(end)まで積分します。
2要素ベクトルtspan = [t0 tf]に対して、ソルバは、各積分ステップで計算した解を出力します。 2要素以上の要素をもつtspanベクトルに対して、ソルバは、つぎに記述するように、与えられた時刻で解を出力します。時間ベクトルは、増加、または、減少のどちらかの順に配置されている必要があります。
2つ以上の要素をもつtspanを設定すると、ソルバが、tspan(1) から tspan(end) までの区間に渡り使用する内部時間ステップに影響を与えません。MATLAB ODE suite の中のすべてのソルバは、基本式を連続的に拡張することにより、出力値を得ます。ソルバは、tspanで設定した時刻点を必ずしも正確にステップを処理しませんが、指定した時刻点で作成された解は、内部の時刻点で計算された解と同じ度合いの精度をもっています。
2要素以上をもつ tspan を設定することは、計算の効率化に影響を与えませんが、大きなシステムに対しては、メモリの管理に影響を与えます。
y0
問題の初期条件ベクトル 初期値問題と初期条件を参照してください。

出力引数は、つぎのものです。

t
計算された時間ステップの列ベクトル
y
解を表す計算結果の配列。yの中の各々の行は、tの対応する行の中で出力される時刻での解に対応します。

ODE ソルバの付加的な引数

よりアドバンストなアプリケーションに関して、ODE ファイルに対して、入力引数ソルバオプションと付加的なパラメータを設定することもできます。

options
オプションのパラメータ構造体を使って、デフォルトの積分パラメータを変更します。4つの入力引数を使います。
    [t,y] = solver(odefun,tspan,y0,options)
    
ユーザが設定できる構造体の作り方やプロパティの記述法は、ODE ソルバの性能の改良を参照してください。
p1,p2...
ソルバが、odefunに渡すパラメータ。
    [t,y] = solver(odefun,tspan,y0,options,p1,p2...)
    
ソルバは、任意の入力パラメータを、options引数の後に設定して、odefunoptionsの中に設定した関数に渡します。オプションを設定しない場合は、options = []を使ってください。関数odefun は、つぎの型をしています。
    dydt = odefun(t,y,p1,p2,...)
    
例題については、付加パラメータをODE 関数に渡すを参照してください。


 初期値 ODE 問題の導入 ODE 問題の表現