NDSolveの"DoubleStep"法

はじめに

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

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

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

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

例題

例題と効用関数を含むパッケージをロードする:
パッケージから硬くない系の問題を選ぶ:
パッケージから硬い系の問題を選ぶ:

組込みメソッドの拡張

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

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

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

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

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

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

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

次数と対称性

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

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

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

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

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

以下では"SymmetricMethodQ"属性を使って,古典的ルンゲ・クッタ法が対称とならないよう明示的に指定している:

硬さ検出

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

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

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

高次

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

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

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

"DoubleStep"をネストして適用すると,次数が上がり,適応刻み幅推定が提供される:

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

オプションの要約

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

"DoubleStep"法のオプション

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

オプション"StepSizeSafetyFactors"のデフォルト設定Automaticでは,硬さの基底メソッドには値{9/10,4/5}が,硬くない基底メソッドには{9/10,13/20}が使われる.