NDSolveの"ImplicitRungeKutta"メソッド
はじめに
陰的ルンゲ・クッタ(Runge–Kutta)メソッドには,多くの望ましい特性がある.
例えば,ガウス・ルジャンドル(Gauss–Legendre)の公式は自己共役である.これは,時間内に前進あるいは後退の積分を行うと,同じ解になるということである.
係数
陰的ルンゲクッタ法の汎用フレームワークが実装されている.ここまでの焦点は,興味深い幾何属性を持つメソッドであり,現在以下のスキームをカバーしている.
係数の生成
- Rootオブジェクトが構築され,解を表す(数値近似のために一意的な根の分離とジェンキンス・トラウブ(Jenkins–Traub)アルゴリズムが使われる).
- 次に精度係数のRootオブジェクトが数値的に近似される.
- その後,係数の方程式を解くために,非融合のヴァンデルモンド型に特化されたソルバが使われる([GVL96]を参照のこと).
例題
"ImplicitRungeKutta"の"ImplicitSolver"メソッドには,非線形方程式系を解く際に目標とする絶対誤差,相対誤差を指定するオプションAccuracyGoal,PrecisionGoalがある.
これらのオプションは,NDSolveでこれに相当するオプションと同じデフォルト値を持つ.非線形方程式系は,メソッドの局所誤差よりも格段に高い精度に解く意味がないからである.
最初の不変量は系のハミルトニアンで,誤差は有界となった.陰的ルンゲ・クッタのガウス法はシンプレクティック積分法なので,そうでなければならない.
以下は,陰的中点公式を一段の二次陰的ルンゲ・クッタとして定義する.
現在,陰的ルンゲ・クッタのフレームワークは非線形系を脱共役するためのまとまったニュートン法は使わない.
オプションの要約
"ImplicitRungeKutta"のオプション
オプション名
|
デフォルト値
| |
"Coefficients" | "ImplicitRungeKuttaGaussCoefficients" | 陰的ルンゲ・クッタ法で使う係数を指定する |
"DifferenceOrder" | Automatic | メソッドの局所確度の次数を指定する |
"ImplicitSolver" | "Newton" | 非線形系に使うソルバを指定する.有効な設定はFixedPointか"Newton" |
"StepSizeControlParameters" | Automatic | ステップ制御パラメータを指定する |
"StepSizeRatioBounds" | {,4} | 新しい刻み幅での相対変化の限界を指定する |
"StepSizeSafetyFactors" | Automatic | 刻み幅推定で使用する安全率を指定する |
"ImplicitRungeKutta"メソッドのオプション
オプション"StepSizeSafetyFactors"のデフォルト設定Automaticでは,値{9/10,9/10}が使われる.
"ImplicitSolver"のオプション
オプション名
|
デフォルト値
| |
AccuracyGoal | Automatic | 非線形系を解くのに使う絶対許容誤差を指定する |
"IterationSafetyFactor" | 非線形系を解くのに使う安全率を指定する | |
MaxIterations | Automatic | 非線形系を解くのに使う最大反復回数を指定する |
PrecisionGoal | Automatic | 非線形系を解くのに使う相対許容誤差を指定する |
オプション名
|
デフォルト値
| |
"JacobianEvaluationParameter" | ニュートン反復でいつヤコビ行列を再計算するかを指定する | |
"LinearSolveMethod" | Automatic | ニュートン反復で使用する線形ソルバを指定する |
"LUDecompositionEvaluationParameter" | ニュートン反復のいつLU分解を計算するかを指定する |
"ImplicitSolver"の"Newton"メソッド特定のオプション