BDFと暗黙のルンゲクッタの時間ステップ


16

BDFタイムステッピングよりも高次の暗黙的なルンゲクッタ(IMRK)を選択する理由はありますか?段階IMRKにはqが必要なので、BDFの方がはるかに簡単に思えますqqタイムステップごとに線形解。BDFとIMRKの安定性は重要なポイントのようです。暗黙のタイムステッパーを比較/比較するリソースが見つかりません。

それが役立つ場合、最終的な目標は移流拡散PDEの高次の暗黙的なタイムステッパーを選択することです。

回答:


34

はい、何らかの理由でこれに関するリソースが多すぎません。非常に長い間、標準のgotoは「BDFメソッドを使用する」だけでした。このマントラは、いくつかの歴史的理由で明確に設定されました。あるGearのコードが最初に広く利用可能なスティッフソルバーであり、別のMATLABスイートには暗黙のRKメソッドが含まれていませんでした。ただし、このヒューリスティックは常に正しいとは限りません。テストから、通常は間違っていると思います。詳細に説明させてください。

BDFメソッドは固定費が高い

BDFメソッドのアダプティブタイムステッピングとアダプティブ順序には、非常に高いコストがかかります。係数を再計算するか、値を異なる時間に補間する必要があります。ここで現在のBDFコードをより良くするために多くの作業が行われています(この問題を異なる方法で処理しようとする実装には2つのよく知られた "フォーム"があります)が、実際には非常に難しいソフトウェアエンジニアリングの問題です。このため、実際には、BDFコードのほとんどはすべてGearの元のコードの子孫です。Gearのvode、lsoda、SundialのCVODE、DAEソルバーのDASKRおよびDASSLでさえ同じコードの子孫です。

これが意味することは、問題が「小さすぎる」場合、高い固定費が実際に重要であり、Implicit RKメソッドの方がうまくいくということです。

高次BDFメソッドは、複雑な固有値に対して非常に不安定です

BDFメソッドを使用すると、最大次数を制御し、理由をより控えめにすることができます。高次のBDFメソッドは、「中規模」の複雑な固有値でさえ非常にうまく処理できません。そのため、これらのケースでは、安定するために順序を落とさなければなりません。これは、6次BDFメソッドが技術的に安定しているのに、5次でもすでに問題があるために無視されることが多い理由です(6次はさらに不安定です)。A安定なのは2次までであるため、常にそこにフォールバックできますが、ステッピングはエラーが支配的です。

したがって、自明ではない問題でBDFコードを使用する場合、常に5次ではありません。振動によりその順序が低下します。

BDFメソッドは開始コストが高い

自動起動するBDFメソッドは、起動コストが高くなります。それらは小さなオイラーステップから始まり、小さなBDF-2ステップなどで始まります。より短い時間の積分では、これは無視できない効果をもたらします。イベント処理のために頻繁に停止する場合、これはコードの効率を大きく損ないます。これは、これまでヘビーイベント処理や遅延方程式の状況で使用多段階方法を見ればあなたはめったに(遅延方程式がそれぞれに伝播され、それぞれ十分高い順不連続、で再起動していない理由の一つであるごとに遅延時間のためにτττ

マルチステップメソッドであるBDFメソッドには、最高のスケーリングがあります

fradauいえため、最大1,000の空間変数のメソッドでため、YMMVです。知る唯一の方法はテストすることです。

利用可能なベンチマークは何ですか?

Hairerの本とDiffEqBenchmarks(以下で説明します)は、簡単に入手できる作業精度図の点でおそらく最高です。Hairerの常微分方程式IIの解法には、154ページと155ページに一連の作業精度図があります。彼が選んだ問題の結果は、上記の理由で上に述べたものと一致します。 「十分に大きい」。注意すべきもう1つの興味深い点は、高次のRosenbrockメソッドがRodas、誤差が大きいレジームで(彼のような)彼の多くのテストで最も効率的であり、暗黙のRK radau5がより低い誤差で最も効率的であることです。しかし、彼のテストの問題は、大規模なPDEの離散化ではないため、上記の点を考慮してください。

どのようにテスト/ベンチマークしますか?

JuliaのDifferentialEquations.jlでこれをテストするのが好きです(免責事項:私は開発者の1人です)。これはジュリアにあります。プログラミング言語は本当にここで注意を引く必要があります。関数呼び出しのコストが増加するにつれて、BDFメソッドはより適切になります。R / MATLAB / Pythonでは、ユーザーの関数は、最適化されたソルバーが実際に使用する必要がある唯一のR / MATLAB / Pythonコードです。SciPyまたはSundialsラッパーを使用している場合、渡す関数を除くすべてのC / Fortranコードです。 。これは、動的言語(Juliaではない)では、関数呼び出しが非常に最適化されていないため、BDFメソッドが通常よりも優れていることを意味します(これがおそらくShampineが含まれている理由です)ode15sがMATLABスイートにれているが、暗黙のRKメソッドがない) 。

fODEProblem

@time sol = solve(prob,CVODE_BDF())
@time sol = solve(prob,radau())

1 CVODEつ目はSundials ' (BDFメソッド)を使用し、2つ目はHairer'sを使用しますradau(暗黙のRK)を使用します。

いずれの場合もODEProblem、ベンチマークツールを使用して、さまざまなアルゴリズムがさまざまな適応トレランスに対応する方法を確認できます。結果の一部はDiffEqBenchmarks.jlに投稿されています。たとえば、ROBER問題(3つの硬いODEのシステム)では、サンダイアルは実際には不安定であり、十分に高い許容誤差で発散することがわかります(一方、他の方法はうまく収束します)。安定性の問題に関する上記の注意を示します。Van Der Pol問題についてについては、それがより洗浄されていることがわかります。まだ投稿していないものはまだたくさんありますが、高次のRosenbrockメソッド(RodasはFortranバージョンです)を終えるまで、たぶん到達できません。

(注:これらの厳しいベンチマークは更新が必要です。1つは、何らかの理由でODE.jlのメソッドが分岐するため、テキストを更新する必要があります...)

外挿法とRKC

seulexスティッフな問題に対して行われるような外挿法もあります。これらは「無限の適応順序」ですが、それは、非常に低いエラーを探しているとき(つまり1e-10、約以下でスティッフな問題を解決しようとしている場合、おそらく明示的な方法を使用できます) 。ただし、ほとんどの場合、それらは効率的ではないため、避ける必要があります。

Runge-Kutta Chebyschevは、考慮すべきスティッフな問題でも機能する明示的な方法です。私はまだDifferentialEquations.jlにラップしていないので、どのように公平であるかについての確固たる証拠はありません。

考慮すべきその他の方法:硬いPDEの特殊な方法

おそらく、高次のRosenbrockメソッドは、ヤコビアンを簡単に計算できる小中サイズのスティッフな問題に対して、何倍も優れていることに注意してください。ただし、一部のPDEについては、移流拡散の問題がこのカテゴリに分類されると考えており、Rosenbrockは精度の一部を失う可能性があります。また、彼らは彼らの正確さを保つために非常に正確なヤコビアンを必要とします。ジュリアでは、これは簡単です。ソルバーには、機械イプシロンに対して正しいシンボリックおよび自己微分が付属しているためです。ただし、MATLABのようなものode23sこれらの実装は有限差分を使用するため、問題が発生する可能性があります。BDFおよび暗黙のRKメソッドの場合、ヤコビアンのエラーは収束が遅くなりますが、Rosenbrockの場合、これらは暗黙の方程式ではなく、ヤコビの反転を含むRKメソッドであるため、精度が低下します。

他の方法は、指数RKメソッド、指数時間差(ETD)、暗黙的積分係数(IIF)、指数Rosenbrockメソッドです。最初の3つは、多くのPDE離散化で、

あなたはt=Aあなたは+fあなたは

AAあなたはeAA

AJあなたは+gあなたはJf=Jあなたは+g

さらに他の方法:最新の作成

完全に暗黙的なメソッドは、スティッフな方程式に対して明らかに効果的です。PDEが十分に大きくない場合、HPCを使用するのに十分な「スペースの並列化」を効果的に行えません。代わりに、完全に暗黙的であり、したがって硬い方程式には適しているが、ハードウェアを最大限に活用するために並列である並列時間離散化を作成できます。XBraidは、このような手法を使用するソルバーであり、主な方法はPFFASTとパラリアル法です。DifferentialEquations.jlは、同様に機能するニューラルネットメソッドを開発しています。

繰り返しますが、これは、効率的に並列化するのに十分な大きさの空間離散化がなく、並列計算のリソースが利用できる場合に最適です。

結論:一粒の塩で漸近的な検討を行う

t

BDFメソッドは漸近的に最適ですが、ほとんどの場合、おそらくそのレジームでは機能していません。ただし、空間離散化に十分なポイントがある場合、BDFメソッドは(線形解法を並列化することにより)空間で効率的に並列化でき、関数呼び出しが最小になるため、最善を尽くします。ただし、PDEの離散化が十分に大きくない場合は、暗黙的なRK、Rosenbrock、指数RKなどの方法をよく調べてください。DifferentialEquations.jlなどのソフトウェアスイートを使用すると、さまざまな方法を簡単に交換でき、多くの場合事前に知ることができないため、問題のドメインに最適な方法を理解するのに役立ちます。

[テストスイートに追加する問題の例がある場合は、お気軽にお問い合わせください。これに関する非常に包括的なリソースを保持したいと思います。Hairerのすべてのベンチマークを実行可能なノートブック形式で「すぐに」入手し、科学分野を代表する他の問題を望んでいます。どんな助けも大歓迎です!]


3
これは非常に詳細な対応です。新しい方向性を検討する必要があります。ご清聴ありがとうございました。
user107904

3
このフォーラムの質問に対する回答は、しばらくお待ちください!
ヴォルフガングバンガース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.