NDSolveの"DoubleStep"法
はじめに
"DoubleStep"法は,任意の1ステップの積分法にリチャードソン(Richardson)の補外を1度適用する.
これは常に最適であるわけではないが,誤差推定(刻み幅の適応性)の装備と,局所確度の次数を増加させるための補外には一般的な手法である.
"DoubleStep"は補外の特殊形であるが,効率を考慮して別のメソッドとして実装されている.
例題
組込みメソッドの拡張
"ExplicitEuler"法はオイラー法を使って,積分を1ステップ実行する.これには局所誤差制御がないため,固定刻み幅を使う.
ユーザ定義のメソッドとメソッドの属性
積分法はNDSolveのフレームワークに加えることができる.
このような積分法を組込みメソッドのように動作させるためには,メソッドの属性をいろいろと指定する必要があるかもしれない.こうすることでその属性は,複合積分法を構築する際に他のメソッドで使用することができるようになる.
"DoubleStep"によって使われるメソッドの属性が記述されるようになった.
次数と対称性
基本メソッドの次数が分からないと,"DoubleStep"はリチャードソンの補外を実行することができない.
リチャードソン補外の結果の次数は,補外されたメソッドの局所誤差拡張が のベキ乗か のベキ乗か(後者は基本メソッドが対称である場合に起る)によって異なる.
対称性に対するメソッドの属性が定義されていない場合,"DoubleStep"法はデフォルトで基本積分法は対称ではないと想定する.
硬さ検出
硬さ検出に使われるスキームの詳細は,「NDSolveのStiffnessTestメソッドオプション」に記載されている.
硬さの検出には,まだ定義されていないメソッドの線形安定境界について知っている必要がある.
外挿のもとでメソッドの線形安定境界を計算することは,きわめて複雑である.そのためすべてのメソッドに使用できるデフォルト値が選ばれる.これは0における指数関数のp次ベキ級数近似を考え,高次項を無視することに相当する.
- "LocalExtrapolation"がTrueならば,一般値は次数p + 2(対称)あるいはp + 1のメソッドに対応する.
- "LocalExtrapolation"がFalseならば,基底メソッドのプロパティ"LinearStabilityBoundary"がチェックされる.値が指定されていなければ,次数pのメソッドに対するデフォルトが選ばれる.
高次
以下の例では,(3)を2回適用して,四次の古典的ルンゲ・クッタを補外する.
"DoubleStep"の内部指定により,五次メソッドが構築される.
"DoubleStep"の2回目の適用は,適応刻み幅を使用する六次のメソッドを求めるためである.
一般に低次のメソッドから高次の積分法を構築する際には,"Extrapolation"法の方が適している.
オプションの要約
オプション名
|
デフォルト値
| |
"LocalExtrapolation" | True | 4に従った局所補外を使って解を求めるかどうかを指定する |
Method | None | 使用するメソッドを基底積分アルゴリズムとして指定する |
"StepSizeRatioBounds" | {,4} | 現在の刻み幅 hn から新しい刻み幅 hn+1への相対的な変化量を「下限≤ hn+1/hn ≤上限」として指定する |
"StepSizeSafetyFactors" | Automatic | 適応刻み幅に使われる誤差推定5に組み入れる安全率を指定する |
"StiffnessTest" | Automatic | 硬さ検出機能を使うかどうかを指定する |
オプション"StiffnessTest"のデフォルト設定Automaticは,硬くない基底メソッドが使われるとき硬さ検出機能が有効であることを意味する.
オプション"StepSizeSafetyFactors"のデフォルト設定Automaticでは,硬さの基底メソッドには値{9/10,4/5}が,硬くない基底メソッドには{9/10,13/20}が使われる.