9次以上の明示的なRunge Kuttaメソッドの作成


9

私が見たいくつかの古い本は、指定された注文の明示的なルンゲクッタ法の最小ステージ数は、注文については不明であると述べています。これはまだ本当ですか?9

高次のルンゲクッタ法を自動的に処理するためのライブラリはありますか?


「自動的に作業する」とはどういう意味ですか?
David Ketcheson、2014

@DavidKetcheson係数の生成とそのプロパティの調査。条件と変数がいくつあるかを考えると、誰かが純粋に手動で高次のメソッドを導出するとは想像できません。
Kirill、

私はそのような係数を生成するソフトウェアを知りません。Terry Feaginによって開発されたものなど、高次RKメソッドをオンラインで見ました。次数10の係数を取得するプロセスを説明する論文はこちらです。それは自動化された方法が簡単に実装されるようには見えません、そして私はそれらが存在することを疑います。(補足として、9番のRKは見たことがなく、常に(7)8または(8)10です。RK9が存在するかどうかは不明です!)
エティエンヌ

(7)8、(8)9、(8)10、(10)12、および(12)14はすべてDifferrntialEquations.jlに実装されています。その後、たくさんの問題を試すことができます。少し詳細な評価をさせていただきます。
Chris Rackauckas

上記の8次は、浮動小数点の精度では一般的に役に立たないことに注意してください。Vernerの方法は非常に優れていますが、FSALに簡単に適用できるのは6つまでです。Feaginには補間がありません。
Chris Rackauckas

回答:


14

境界

それはまだ本当です。でブッチャーの本、196ページ、それは次のように述べている:で1985紙、ブッチャーはあなたが順序8を得るために11個の段階が必要であることを示し、これがシャープです。オーダー10の場合、Hairerは17段階の方法のファミリーを導き出しましたが、もっとうまくできるかどうかはわかりません。同じ情報が、ヘアラー、ノーセット、およびワナーの巻のセクションII.5にも記載されています。わたし。後者のリファレンスでは、高次ペア(次数8まで)を開発するためのいくつかの手法も説明しています。

外挿によって構成できるため、注文に必要な最小ステージ数には上限があります。これは非常に長い間知られています。説明については、この最近の私の論文を参照してください。ただし、この範囲は次数が2次であり、確かにかなり悲観的です。 以下で説明するnodepyソフトウェアは、これらのメソッド、および任意の順序の遅延補正メソッド(Runge-Kuttaメソッド)に対して正確な係数を生成できます。

@Etienneは、手作業で作成された最高次数のメソッドはTerry Feaginによるものだと言っているのは正しいと思います。彼の他のコメントに関して、このペーパーにはいくつかの9(8)ペアが含まれています。

JHバーナー、低段階次数の高次陽的ルンゲクッタペア、応用数値数学、第22巻、第1号から第3号、1996年11月、ページ345-357

Np

p | N
-----
1 | 1
2 | 2
3 | 4
4 | 8
5 | 17
6 | 37
7 | 85
8 | 200
9 | 486
10| 1205
11| 3047
12| 7813
13| 20300
14| 53264

ソフトウェア

非常に高次のメソッドの場合、注文条件の数と複雑さが手作業で処理できなくなります。一部のシンボリックパッケージ(少なくともMathematica)には、Runge-Kutta注文条件を生成する機能があります。おそらく他にもいくつかのパッケージがあるでしょうが、私は次のことを知っています(両方とも私が書いたものです):

  • nodepy:任意の順序への順序条件のシンボリック式とコードを生成できるPythonパッケージ。また、これらの条件のチェック、エラー係数の計算などのためのPythonコードも含まれています。
  • RK-Opt:とりわけ、いくつかの異なる目的のために最適化された係数を持つ高次ルンゲクッタ法を見つけることができるMATLABパッケージ。現在、9次の明示的なRKを処理できませんでした(stage-order-oneメソッドの場合は8次まで、より高いステージ次数のメソッドの場合は10次まで)。それがあなたが興味を持っているものであるなら、私はかなり簡単に9次(およびそれ以上)の条件を追加できます。

このような高次で重要になる注文条件に関するもう1つの興味深い注意点は、それらを導出する2つの方法があり、それらが異なる(ただし、全体として同等)条件を与えることです。1つはブッチャーによるもので、もう1つはアルブレヒトによるものです。


5

@DavidKetchesonの答えは重要なポイントに到達します。外挿を使用して、十分に高い次数のメソッドをいつでも構築できます。これは非常に悲観的な限界であり、常にはるかに優れた方法で実行できます。優れたメソッドはすべて手動で導出されます(コンピュータの助けを借りて)代数ツール)、下限は不明であり、最高次数メソッドはFeaginによるものです。いくつかのコメントを踏まえて、私はフィールドでの現在の最先端のタブローの議論で答えをまとめたいと思いました。

RKタブローの概要が必要な場合は、このジュリアコードで見つけることができます。それらが由来した論文の引用は、タブローコンストラクターのドキュメント文字列にあります。DifferentialEquations.jlのための開発者向けドキュメントが使用可能として、これらのタブローのすべてを一覧表示し、あなたがここで見ることができ、これらはすべてではないだけの注文条件が満たされていることを確認するために、トラヴィスとAppVeyor継続的な統合スイートを使用してテストしていることが、実際に彼ら彼ら要求された収束を実現します(検証テスト)。これらから、次のことがわかります。

  • 5注文9メソッド
  • 6オーダー10メソッド
  • 2注文12メソッド
  • 1次14法

(それが公開されていることがわかりました)。繰り返しになりますが、すべて手作業で作成されています。

収束テストは、一部の導出が64ビットを超える数値で機能するのに十分な精度で実行されなかったことを示しています(これらはこのようにコメントされています)。したがって、これは注目すべき興味深い癖です。これらの高次では、通常、「エラーに対してx」次数条件を満たす係数のみが取得されますが、任意の精度の演算を使用すると、実際にこれらの範囲を検出できます。したがって、係数を実行する精度は重要であり、テストする精度をカバーするように選択する必要があります(もちろん、/を使用します)。

plot(tableau)一連の安定性プロットが必要な場合は、Plots.jlレシピを使用できます。これらの多くが書き留められた優れたメモのセットは、Peter StoneのWebサイトにあります(下に移動して、注文10スキームをクリックすると、PDFの束が表示されます)。DifferentialEquations.jlを開発する際に、テストの問題について体系的に検討するために、一連のタブローを作成しました。分析インジケーターを見て、メインライブラリに含める必要があるものを確認します。ここで簡単なメモを書きましたメインライブラリに含まれているアルゴリズムからわかるように、私が価値があると思ったのは、バーナー法とフィージン法でした。Verner 9次法は、次数に一致する内挿を含む最高次数法です。それは認識すべきことです:Feaginメソッドには対応する補間関数がありません(ただし、Hermiteをブートストラップすることはできますが、これは本当に非効率的です)。

これらはすべて非常に効率的な実装で実装されているので、自分で試して、さまざまな機能が実際にどれほど重要であるかを確認できます。以下は、使用中のFeaginメソッドを示すJupyterノートブックです。収束プロットが実際に1e-48エラーになることに注意してください。高次の方法は、非常に低い許容誤差が本当に必要な場合にのみ、低次の方法よりも効率的です。DiffEqBenchmarks.jlでそれらのいくつかを使用するいくつかのベンチマークを見つけることができますが、それらが使用される場合、それは通常9次のVernerメソッドであり、通常、ベンチマークがこの高次の効率が高いレジームにないことを示します。

したがって、いくつかの高次メソッドをいじって操作したい場合は、RK-Optが(@DavidKetchesonで述べたように)いくつかを導出するための優れたツールであり、DifferentialEquations.jlにはすべての公開されたメソッドがあります(私はそう思いますか? )それらに対して簡単にテスト/ベンチマークできるように実装されています。ただし、削除できる仮定を見つけない限り、私のテストからは、Verner(注文6〜9)およびFeagin(注文10 +)メソッドに勝る何かを見つけることができませんでした。YMMVですが、これについてはもっと研究したいと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.