BDF vs implizite Runge Kutta Zeitsprung


16

Gibt es Gründe, warum man implizite Runge Kutta (IMRK) höherer Ordnung anstelle von BDF-Zeitschritten wählen sollte? BDF scheint mir viel einfacher zu sein, da Stufe IMRK q lineare Lösungen pro Zeitschritt benötigt. Stabilität für BDF und IMRK scheint ein strittiger Punkt zu sein. Ich kann keine Ressourcen finden, die implizite Zeitschritte vergleichen / gegenüberstellen.qq

Wenn es hilft, ist das Endziel für mich, einen impliziten Zeitschrittmacher hoher Ordnung für Advektionsdiffusions-PDE auszuwählen.

Antworten:


34

Ja, aus irgendeinem Grund gibt es nicht zu viele Ressourcen. Für eine sehr lange Zeit lautete die Standardeinstellung "nur BDF-Methoden verwenden". Dieses Mantra wurde aus wenigen historischen Gründen in Stein gemeißelt: Zum einen war der Code von Gear der erste allgemein verfügbare Stiff-Solver, zum anderen enthielt die MATLAB-Suite keine implizite RK-Methode. Diese Heuristik ist jedoch nicht immer korrekt, und ich würde sagen, dass sie beim Testen normalerweise falsch ist. Lassen Sie mich das näher erläutern.

BDF-Methoden haben hohe Fixkosten

Adaptives Timestepping und adaptive Order bei BDF-Methoden sind sehr kostenintensiv. Koeffizienten müssen neu berechnet werden oder Werte müssen zu unterschiedlichen Zeiten interpoliert werden. Es wurde viel gearbeitet, um die aktuellen BDF-Codes zu verbessern (es gibt zwei bekannte "Formulare" für die Implementierung, die versuchen, dieses Problem unterschiedlich zu behandeln), aber es ist eigentlich nur ein sehr schwieriges Problem bei der Softwareentwicklung. Aus diesem Grund sind die meisten BDF-Codes Abkömmlinge des ursprünglichen Codes von Gear: Gear, Vode, Lsoda, Sundials CVODE, sogar die DAE-Löser DASKR und DASSL sind Abkömmlinge desselben Codes.

Dies bedeutet, dass bei einem "zu kleinen" Problem die hohen Fixkosten wirklich wichtig sind und die impliziten RK-Methoden besser funktionieren.

BDF-Methoden hoher Ordnung sind für komplexe Eigenwerte sehr instabil

Mit BDF-Methoden können Sie die maximale Reihenfolge steuern und aus einem bestimmten Grund konservativer gestalten: Die BDF-Methoden höherer Ordnung können selbst komplexe Eigenwerte mittlerer Größe nicht sehr gut verarbeiten. In diesen Fällen müssen sie also ihre Reihenfolge fallen lassen, um stabil zu sein. Dies ist der Grund, warum die BDF-Methode 6. Ordnung, obwohl technisch stabil, oft ignoriert wird, weil selbst die 5. Ordnung hier bereits Probleme hat (und die 6. Ordnung noch weniger stabil ist). Nur bis zur 2. Ordnung ist A-stabil, es kann also immer auf diese zurückgegriffen werden, aber dann ist das Steppen fehlerbeherrscht.

Wenn Sie also BDF-Codes bei nicht trivialen Problemen verwenden, erhalten Sie nicht immer die 5. Ordnung. Schwingungen verursachen ein Absinken der Reihenfolge.

BDF-Methoden haben hohe Startkosten

ichττ

BDF-Methoden sind Mehrschrittmethoden mit der besten Skalierung

fradau

Welche Benchmarks gibt es?

Hairers Buch und DiffEqBenchmarks (unten erklärt) sind wahrscheinlich die besten in Bezug auf leicht verfügbare Diagramme mit Arbeitsgenauigkeit. Das Lösen gewöhnlicher Differentialgleichungen durch Hairer II enthält eine Reihe von Arbeitsgenauigkeitsdiagrammen auf den Seiten 154 und 155. Die Ergebnisse der von ihm gewählten Probleme stimmen aus den oben genannten Gründen überein: Die implizite RK ist effizienter, wenn das Problem nicht vorliegt "ausreichend groß". Eine andere interessante Sache ist, dass Rosenbrock-Methoden Rodashöherer Ordnung in vielen seiner Tests (wie ) in dem Regime, in dem der Fehler höher ist, als am effizientesten herauskommen und die implizite RK radau5bei niedrigeren Fehlern am effizientesten ist. Bei seinen Testproblemen handelt es sich jedoch meistens nicht um Diskretisierungen großer PDEs. Berücksichtigen Sie daher die obigen Punkte.

Wie testen / bewerten Sie?

Ich teste dies gerne mit DifferentialEquations.jl in Julia (Haftungsausschluss: Ich bin einer der Entwickler). Das ist in Julia. Die Programmiersprache sollte hier wirklich eine Notiz bekommen. Denken Sie daran, dass BDF-Methoden mit steigenden Kosten des Funktionsaufrufs angemessener sind. In R / MATLAB / Python ist die Benutzerfunktion der einzige R / MATLAB / Python-Code, den die optimierten Solver tatsächlich verwenden müssen: Wenn Sie SciPy- oder Sonnenuhren-Wrapper verwenden, ist alles C / Fortran-Code mit Ausnahme der von Ihnen übergebenen Funktion . Dies bedeutet, dass BDF-Methoden in dynamischen Sprachen (die nicht Julia sind) besser funktionieren als normalerweise, da die Funktionsaufrufe sehr unoptimiert sind (dies ist wahrscheinlich der Grund, warum Shampine ode15sin der MATLAB-Suite enthalten ist, aber keine implizite RK-Methode). .

fODEProblem

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

Dabei verwendet die erste CVODEMethode die Sonnenuhr (BDF-Methode) und die zweite die Hairer-Methode radau(implizite RK).

Für jeden ODEProblem den Benchmarking-Tools können Sie feststellen, wie sich die verschiedenen Algorithmen auf unterschiedliche adaptive Toleranzen skalieren lassen. Einige Ergebnisse werden auf DiffEqBenchmarks.jl veröffentlicht . Beispielsweise können Sie beim ROBER-Problem (System mit 3 steifen ODEs) feststellen, dass die Sonnenuhren tatsächlich instabil sind und mit einer ausreichend hohen Toleranz voneinander abweichen (während die anderen Methoden problemlos konvergieren). Dies zeigt die obige Anmerkung zu Stabilitätsproblemen. Beim Van Der Pol-Problem sieht man, dass es sich eher um eine Wäsche handelt. Ich habe viel mehr als ich noch nicht gepostet habe, werde es aber wahrscheinlich nicht schaffen, bis ich einige Rosenbrock-Methoden höherer Ordnung abgeschlossen habe (Rodas ist die Fortran-Version davon).

(Hinweis: Diese strengen Benchmarks müssen aktualisiert werden. Zum einen muss der Text aktualisiert werden, da die Methoden von ODE.jl aus irgendeinem Grund abweichen ...)

Extrpolationsmethoden und RKC

Es gibt auch Extrapolationsmethoden wie seulex die für steife Probleme gemacht sind. Dies sind "unendliche adaptive Ordnungen", aber das bedeutet nur, dass sie asymtopisch gut sind, wenn Sie nach einem sehr geringen Fehler suchen (dh wenn Sie schwergängige Probleme mit einem niedrigeren Wert als 1e-10oder so lösen möchten. In diesem Fall können Sie wahrscheinlich eine explizite Methode verwenden). . In den meisten Fällen sind sie jedoch nicht so effizient und sollten vermieden werden.

Runge-Kutta Chebyschev ist eine explizite Methode, die auch bei schwierigen Problemen funktioniert, die Sie berücksichtigen sollten. Ich habe es noch nicht in DifferentialEquations.jl eingepackt, daher habe ich selbst keine konkreten Beweise dafür, wie es läuft.

Andere zu berücksichtigende Methoden: Spezialmethoden für steife PDEs

Man sollte sich wahrscheinlich merken, dass Rosenbrock-Methoden höherer Ordnung für kleine und mittlere steife Probleme sehr gut, oft sogar noch besser, geeignet sind, wenn man die Jacobi-Methode leicht berechnen kann. Ich glaube jedoch, dass bei einigen PDEs Advektionsdiffusionsprobleme in diese Kategorie fallen und Rosenbrock einige Ordnungen an Genauigkeit verlieren kann. Außerdem benötigen sie sehr genaue Jakobiner, um ihre Genauigkeit zu erhalten. In Julia ist dies einfach, da die Löser symbolische und automatische Unterscheidungsmerkmale aufweisen, die für die Bearbeitung von epsilon korrekt sein können. Allerdings Dinge wie MATLABode23skönnen Probleme verursachen, da diese Implementierungen Finite Differenzen verwenden. Bei BDF- und impliziten RK-Methoden führen Fehler im Jacobi zu einer langsameren Konvergenz, während bei Rosenbrock diese nur an Genauigkeit verlieren, da es sich nicht um implizite Gleichungen handelt, sondern um RK-Methoden mit Jacobi-Inversionen.

Andere Methoden, die untersucht werden müssen, sind exponentielle RK-Methoden, exponentielle Zeitdifferenzierung (ETD), impliziter Integrationsfaktor (IIF) und exponentielle Rosenbrock-Methoden. Die ersten drei nutzen die Tatsache, dass bei vielen PDE-Diskretisierungen

ut=EINu+f(u)

EINEINueEINEIN

EINJu+G(u)Jf=Ju+G

Noch eine andere Methode: die neuesten Kreationen

Methoden, die vollständig implizit sind, eignen sich offensichtlich gut für steife Gleichungen. Wenn die PDE nicht groß genug ist, können Sie nicht effektiv genug "im Raum parallelisieren", um HPCs zu verwenden. Stattdessen können Sie zeitlich parallele Diskretisierungen erstellen, die vollständig implizit sind und sich daher für steife Gleichungen eignen, gleichzeitig aber die Hardware voll ausnutzen. XBraid ist ein Solver, der eine solche Technik verwendet, und die Hauptmethoden sind PFFAST- und Parareal-Methoden. DifferentialEquations.jl entwickelt eine neuronale Netzmethode, die ähnlich funktioniert.

Dies ist wiederum optimal, wenn Sie nicht über eine ausreichende räumliche Diskretisierung verfügen, um effizient zu parallelisieren, aber über die Ressourcen für die parallele Berechnung verfügen.

Schlussfolgerung: Nehmen Sie asymptotische Überlegungen mit einem Körnchen Salz auf

Δt

BDF-Methoden sind asymptotisch die besten, aber in den meisten Fällen arbeiten Sie wahrscheinlich nicht in diesem Regime. Wenn die räumliche Diskretisierung jedoch über genügend Punkte verfügt, können BDF-Methoden effizient im Raum parallelisieren (durch Parallelisieren der linearen Lösung) und haben die geringsten Funktionsaufrufe und können somit das Beste leisten. Wenn Ihre PDE-Diskretisierung jedoch nicht groß genug ist, werfen Sie einen Blick auf implizite RK-, Rosenbrock-, exponentielle RK-Methoden usw. Die Verwendung einer Software-Suite wie DifferentialEquations.jl, mit der ein einfacher Austausch zwischen den verschiedenen Methoden möglich ist, kann sehr hilfreich sein, um zu verstehen, welche Methode für Ihre Problemdomäne am besten geeignet ist, da sie in vielen Fällen nicht im Voraus bekannt ist.

[Wenn Sie Beispielprobleme haben, die der Testsuite hinzugefügt werden sollen, helfen Sie uns gerne, diese zu beheben. Ich möchte eine sehr umfassende Ressource zu diesem Thema bereithalten. Ich hoffe, alle Benchmarks von Hairer "bald" in lauffähigen Notebook-Formaten zu haben und würde gerne andere Probleme haben, die für wissenschaftliche Bereiche repräsentativ sind. Jede Hilfe wird geschätzt!]


3
Dies ist eine sehr detaillierte Antwort. Ich habe einige neue Anweisungen zu prüfen! Ich schätze deine Zeit sehr.
user107904

3
Beste Antwort auf jede Frage in diesem Forum in einer Weile!
Wolfgang Bangerth
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.