MATHEMATICAチュートリアル

NDSolveの"DoubleStep"法

はじめに

法は,任意の1ステップの積分法にリチャードソン(Richardson)の補外を1度適用する.

これは常に最適であるわけではないが,誤差推定(刻み幅の適応性)の装備と,局所確度の次数を増加させるための補外には一般的な手法である.

は補外の特殊形であるが,効率を考慮して別のメソッドとして実装されている.

次数 のメソッドがあるとする.

  • 刻み幅 の1ステップで解 を得る.
  • 刻み幅 の2ステップで解 を得る.
    • 次数 の誤差推定は以下のように求められる.
  • 修正項 は,任意の基本メソッドに対する適応刻み幅スキームを可能にする誤差推定に使用できる.
    • 新しい解に を使うか,局所的補外を使って以下のように近似を向上させるかする.
  • 基本の数値積分法が対称なら,向上した近似の次数は となる.対称ではない場合は,次数は となる.

例題

例題と効用関数を含むパッケージをロードする.
In[5]:=
Click for copyable input
パッケージから硬くない系の問題を選ぶ.
In[7]:=
Click for copyable input
パッケージから硬い系の問題を選ぶ.
In[8]:=
Click for copyable input

組込みメソッドの拡張

法はオイラー法を使って,積分を1ステップ実行する.これには局所誤差制御がないため,固定刻み幅を使う.

以下は,基本メソッドをとしたリチャードソンの補外((1)を参照)を1度適用することで微分方程式系を積分する.
局所的誤差推定(2)は積分過程で刻み幅を動的に調整するために使われる.
In[9]:=
Click for copyable input
Out[9]=
以下のプロットは,数値積分の過程で刻み幅がどれだけ変化するかを示している.
In[10]:=
Click for copyable input
Out[10]=
硬さ検出デバイス(「NDSolveのStiffnessTestメソッドオプション」中に記述)により,法は局所確度ではなく安定性によって制限されることが分かる.
In[11]:=
Click for copyable input
Out[11]=
この問題では,別の基本メソッドの方が適切である.
In[12]:=
Click for copyable input
Out[12]=

ユーザ定義のメソッドとメソッドの属性

積分法はNDSolveのフレームワークに加えることができる.

このような積分法を組込みメソッドのように動作させるためには,メソッドの属性をいろいろと指定する必要があるかもしれない.こうすることでその属性は,複合積分法を構築する際に他のメソッドで使用することができるようになる.

以下は古典的ルンゲ・クッタ(Runge-Kutta)法に対するトップレベルのプラグインを定義する方法である(詳細は「NDSolveのメソッドプラグインフレームワーク:古典的ルンゲ・クッタ法」および「NDSolveのExplicitRungeKuttaメソッド」を参照のこと).
In[13]:=
Click for copyable input

によって使われるメソッドの属性が記述されるようになった.

次数と対称性

ここではリチャードソンの補外を1度適用し,古典的ルンゲ・クッタ法に基づいて方程式系を積分してみる.

基本メソッドの次数が分からないと,はリチャードソンの補外を実行することができない.

以下は,古典的ルンゲ・クッタ法は四次であるということをフレームワークに通信するメソッドの属性を設定する.
In[15]:=
Click for copyable input
これで法はが次数4であるということが確認でき,解を絞り込んだり局所誤差を推定したりするときにこの情報が使えるようになる.
In[16]:=
Click for copyable input
Out[16]=

リチャードソン補外の結果の次数は,補外されたメソッドの局所誤差拡張が のベキ乗か のベキ乗か(後者は基本メソッドが対称である場合に起る)によって異なる.

対称性に対するメソッドの属性が定義されていない場合,法はデフォルトで基本積分法は対称ではないと想定する.

以下では属性を使って,古典的ルンゲ・クッタ法が対称とならないよう明示的に指定している.
In[17]:=
Click for copyable input

硬さ検出

硬さ検出に使われるスキームの詳細は,「NDSolveのStiffnessTestメソッドオプション」に記載されている.

硬さの検出には,まだ定義されていないメソッドの線形安定境界について知っている必要がある.

外挿のもとでメソッドの線形安定境界を計算することは,きわめて複雑である.そのためすべてのメソッドに使用できるデフォルト値が選ばれる.これは0における指数関数の次ベキ級数近似を考え,高次項を無視することに相当する.

  • Trueならば,一般値は次数(対称)あるいはのメソッドに対応する.
    • Falseならば,基底メソッドのプロパティがチェックされる.値が指定されていなければ,次数のメソッドに対するデフォルトが選ばれる.
    以下は次数4の一般メソッドの線形安定境界を計算する.
    In[18]:=
    Click for copyable input
    Out[18]=
    プロパティのデフォルト値が使われる.
    以下はフレームワークのメソッドの線形安定境界を指定する方法である.この値はで使用されるときのみに使われる.
    In[20]:=
    Click for copyable input
    属性が指定されていない場合,はデフォルトで,メソッドは硬い系の問題に適さないと想定する(従って,硬さ検出を使う).以下のように属性を指定する.
    In[21]:=
    Click for copyable input

高次

以下の例では,(3)を2回適用して,四次の古典的ルンゲ・クッタを補外する.

の内部指定により,五次メソッドが構築される.

の2回目の適用は,適応刻み幅を使用する六次のメソッドを求めるためである.

をネストして適用すると,次数が上がり,適応刻み幅推定が提供される.
In[22]:=
Click for copyable input
Out[22]=

一般に低次のメソッドから高次の積分法を構築する際には,法の方が適している.

オプションの要約

オプション名
デフォルト値
"LocalExtrapolation"True4に従った局所補外を使って解を求めるかどうかを指定する
MethodNone使用するメソッドを基底積分アルゴリズムとして指定する
"StepSizeRatioBounds"{,4}現在の刻み幅 から新しい刻み幅 への相対的な変化量を「下限≤ ≤上限」として指定する
"StepSizeSafetyFactors"Automatic適応刻み幅に使われる誤差推定5に組み入れる安全率を指定する
"StiffnessTest"Automatic硬さ検出機能を使うかどうかを指定する

法のオプション

オプションのデフォルト設定Automaticは,硬くない基底メソッドが使われるとき硬さ検出機能が有効であることを意味する.

オプションのデフォルト設定Automaticでは,硬さの基底メソッドには値が,硬くない基底メソッドにはが使われる.

New to Mathematica? Find your learning path »
Have a question? Ask support »