高次(つまり4を超える)Runge–Kuttaメソッドが(少なくとも私の知る限り)議論されたり、雇用されたりすることがほとんどない理由について、私は興味がありました。ステップあたりの計算時間が長くなることは理解していますが(たとえば、12次の埋め込みステップを含むRK14)、高次のルンゲクッタ法を使用することには他の欠点(安定性の問題など)がありますか?極端な時間スケールで高度に振動する解を含む方程式に適用される場合、そのような高次の方法は通常好まれませんか?
高次(つまり4を超える)Runge–Kuttaメソッドが(少なくとも私の知る限り)議論されたり、雇用されたりすることがほとんどない理由について、私は興味がありました。ステップあたりの計算時間が長くなることは理解していますが(たとえば、12次の埋め込みステップを含むRK14)、高次のルンゲクッタ法を使用することには他の欠点(安定性の問題など)がありますか?極端な時間スケールで高度に振動する解を含む方程式に適用される場合、そのような高次の方法は通常好まれませんか?
回答:
5次以上のルンゲクッタ法を使用した数千の論文と数百のコードがあります。MATLABで最も一般的に使用される明示的積分器はODE45であり、5次のRunge-Kuttaメソッドを使用してソリューションを前進させることに注意してください。
第五次法を与えたDormand&王子の論文は 1700以上の引用を持っているGoogleニュースによります。それらのほとんどは、いくつかの問題を解決する方法を使用した論文です。 Cash-Karp法の論文には400件以上の引用があります。5よりも高い順序で最も広く使用されている方法は、Google Scholarで400を超える引用があるPrince-Dormandの8次の方法でしょう。他の多くの例を挙げることができます。また、これらの方法を使用している人の多く(ほとんどではないにしても)が論文を引用することは決してないことに留意してください。
また、高次外挿法と遅延補正法はルンゲクッタ法であることに注意してください。
丸め誤差によって精度が制限される場合は、高次の方法を使用する必要があります。これは、高次のメソッドでは必要なステップが少なく(ステップあたりの評価が増えても関数の評価が少ない)、丸めエラーが少ないためです。簡単な実験でこれを自分で簡単に確認できます。それは数値解析の最初のコースにとっては良い宿題の問題です。
10次の方法は、倍精度の計算に非常に役立ちます。それどころか、オイラーの方法しかなかった場合、丸め誤差が大きな問題になり、高次ソルバーがうまく機能する多くの問題に対して非常に高精度の浮動小数点数が必要になります。
あなたが尋ねる
極端な時間スケールで高度に振動する解を含む方程式に適用する場合、そのような高次の方法は通常好まれませんか?
あなたはまさに正しいです!これの主な例は、天体力学です。私はその分野の専門家ではありません。しかし、この論文では、たとえば、天体力学の方法を比較し、5未満の次数も考慮していません。効率的)。
標準の倍精度浮動小数点演算を使用している限り、妥当なステップ数で高精度のソリューションを取得するために、非常に高次のメソッドは必要ありません。実際には、RKF45で実行されるステップの数/長さではなく、倍精度浮動小数点表現によって、ソリューションの精度が通常1.0e-16の相対誤差に制限されることがわかります。
倍精度よりも高い浮動小数点演算方式に切り替える場合、10次の方法を使用する価値があるかもしれません。
Brian Borcherの優れた答えに加えて、多くの実際のアプリケーションでは、非常に硬いODEまたはDAEを認めています。直観的には、これらの問題は、時間の経過とともに滑らかではない急激な変化を経験するため、長いステップサイズでストレッチされる高次多項式とは対照的に、短いステップサイズで細かく広がる低次多項式を使用してより適切にモデル化されます。また、安定性のために、暗黙的なメソッドの使用が必要になることがよくあります。そのため、高次のメソッドの計算ペナルティは非常に急です。
より厳密には、高次の方法は、スティッフな問題に対する低次の方法よりも安定性が低くなります。たとえば、線形マルチステップ法にはダーキスト障壁があります。
RK公式のL安定性について、同様の(ただしはるかに複雑な)ステートメントを作成できます。すべての場合において、順序の増加は、しばしばより正確なソリューションにつながるとは限りません。以下は、1974年のプロテーロとロビンソンの独創的な論文からの抜粋です。
A安定なワンステップ法を使用して、硬い非線形微分方程式の大規模なシステムを解くと、
(a)一部のA安定法は非常に不安定な解を与え、
(b)方程式が硬直は、使用される方法の順序とは無関係であることが多いようです。
このトピックのさらに厳密な取り扱いについては、Hairer&Wannerの古典的なテキスト「常微分方程式の解法II:スティッフとディファレンシャル-代数的問題」、1991年を参照してください。
実際には、硬い方程式は、ほぼ常に台形規則またはTR-BDF2式(MATLABのode23tおよびode23tb関数)を使用して解かれます。これらは両方とも、暗黙的な2次メソッドです。もちろん、安定性が問題ではない場合(つまり、非スティッフな方程式の場合)、多数のオプションから自由に選択できます。RK45が最も一般的な選択肢です。
JuliaソフトウェアDifferentialEquations.jlでは、Feaginメソッドを含む多くの高次メソッドを実装しました。メソッドのリストでそれを見ることができます。そして、提供されたタブローとして使用できる他のトンがたくさんあります。これらの方法はすべてまとめられているため、それらの間のベンチマークを簡単に行うことができます。私がオンラインで持っているベンチマークをここで見ることができ、多くの異なるアルゴリズムをベンチマークすることは非常に簡単であることがわかります。そのため、ベンチマークを実行するのに数分かかる場合は、そのままにしてください。ここに出てくるものの要約があります。
まず、各ベンチマークを見ると、DP5
(Dormand-Prince Order 5)およびDP8
メソッドがHairer Fortranコード(dopri5
およびdop853
)よりも高速であり、これらの実装が非常に最適化されていることに注意することが重要です。これらは、別のスレッドで述べたように、Dormand-Princeメソッドの使いすぎは、メソッドがまだ最良であるためではなく、すでに記述されているためであることを示しています。したがって、最も最適化された実装の実際の比較は、Tsitorousメソッド、Vernerメソッド、およびDifferentialEquations.jlのFeaginメソッドの間で行われます。
一般に、7を超える次数のメソッドには計算コストが追加されますが、選択された許容誤差を考慮すると、通常は次数の方が優先されます。この理由の1つは、低次のメソッドの係数の選択がより最適化されていることです(それらには、小さな「プリンシパルトランケーションエラー係数」があります。ここのような多くの問題で、Verner Efficient 6および7メソッドは非常にうまく機能しますが、Verner Efficient 8のようなメソッドはより低い勾配を持っていることがわかります。これは、高次の「ゲイン」が低い許容誤差で悪化するため、高次のメソッドがより効率的になる許容誤差が常に存在するためです。
しかし、問題は、どのくらい低いですか?最適化された実装では、2つの理由でかなり低くなります。最初の理由は、低次のメソッドがFSALと呼ばれるものを実装するためです(最初と最後が同じです)。このプロパティは、低次のメソッドが次のステップで前のステップの関数評価を再利用することを意味します。したがって、効果的に1つの関数評価が少なくなります。これが適切に使用されている場合、5次メソッド(TsitorousまたはDormand-Prince)のようなものは、実際にタブローが示唆する6つの代わりに5つの関数評価を行っています。これは、Verner 6メソッドにも当てはまります。
もう1つの理由は、補間によるものです。非常に高次の方法を使用する1つの理由は、より少ないステップで、単純に中間値を補間することです。ただし、中間値を取得するために、補間関数は、ステップを実行するために使用されたよりも多くの関数評価を必要とする場合があります。Vernerメソッドを見ると、次数8の内挿を取得するには、次数8のメソッドに対して8つの追加関数評価が必要です。多くの場合、低次のメソッドは「無料の」補間を提供します。たとえば、ほとんどの5次のメソッドには無料の4次の補間があります(追加の関数評価はありません)。つまり、中間値が必要な場合(高次の方法を使用している場合は適切なプロットに必要です)、追加の隠れたコストがあります。これらの補間された値は、イベントの処理と遅延微分方程式の解決に非常に重要であるという事実を考慮し、余分な補間コストが考慮される理由を確認します。
そのため、Feaginメソッドがベンチマークから疑わしく欠落していることがわかります。これらは問題ありません。収束テストは任意の精度の数値などで機能しますが、実際にうまく機能させるためには、かなりばかげた低い許容値を要求する必要があります。例えば、私は未公開ベンチマークに見出さFeagin14
凌ぐVern9
ような公差に(効率的な方法ヴェルナー9オーダー)1e-30
。混oticとしたダイナミクス(Pleidesや3体の天体物理学の問題など)を使用するアプリケーションの場合、敏感な依存性(混systemsとしたシステムのエラーが速くなる)により、この量の精度が必要になる場合があります。ただし、ほとんどの人はおそらく倍精度の浮動小数点数を使用して計算しているため、この許容範囲内で性能が優れているベンチマークは見つかりませんでした。
さらに、Feaginの手法と併用する補間関数はありません。したがって、私がすることは、それらに3次エルミート補間を適用して、1つが存在するようにすることです(驚くほどうまく機能します)。ただし、標準の補間関数がない場合、再帰エルミート法を実行して(この補間を使用して中間点を取得し、5次補間を実行するなど)高次補間を取得できますが、これは非常にコストがかかり、結果として補間は必ずしも低原則の切り捨て誤差項を持っているわけではありません(そのためdt
、本当に小さい場合にのみ有効です。したがって、精度に合わせて非常に優れた補間が必要な場合は、少なくとものようなものに戻る必要がありますVern9
。
外挿法は、任意の次数のルンゲクッタ法を生成するための単なるアルゴリズムであることに注意してください。ただし、それらの順序については、必要以上の手順を実行し、主要な打ち切り誤差係数を持っているため、特定の順序で最適化されたRKメソッドほど効率的ではありません。しかし、以前の分析を考えると、これは、これらのメソッドが「既知の」RKメソッドよりも優れた許容範囲の非常に低い領域があることを意味します。しかし、私が実行したすべてのベンチマークでは、それほど低くはなっていないようです。
選択は、安定性の問題とはまったく関係ありません。実際、DifferentialEquations.jlタブロー(plot(tab)
安定領域のみで可能)を調べると、ほとんどのメソッドが疑わしく同様の安定領域を持っていることがわかります。これは実際には選択肢です。通常、メソッドを導出するとき、著者は通常次のことを行います。
なぜ最後の条件ですか?まあ、その方法はPI制御の適応ステップサイズの選択が行われる方法で常に安定する傾向があるため、「十分に良い」安定領域の良いバーです。したがって、安定領域がすべて類似する傾向があることは偶然ではありません。
あらゆる方法の選択にはトレードオフがあります。最高次のRKメソッドは、係数の選択を最適化するのが難しく、関数評価の数が複合するため(補間が含まれる場合はさらに速くなるため)、許容誤差が低いと効率的ではありません。ただし、許容値が十分に低くなると勝ちますが、必要な許容値は「標準」アプリケーションよりもはるかに低くなる可能性があります(つまり、カオスシステムにのみ適用されます)。