Das Benchmark-Setup
In der Julia-Software DifferentialEquations.jl haben wir viele Methoden höherer Ordnung implementiert, einschließlich der Feagin-Methoden. Sie können es in unserer Liste der Methoden sehen , und dann gibt es Tonnen von anderen, die Sie als mitgelieferte Tableaus verwenden können . Da alle diese Methoden zusammengesetzt sind, können Sie sie problemlos miteinander vergleichen. Sie können die Benchmarks, die ich online habe, hier sehen und sehen, dass es sehr einfach ist, viele verschiedene Algorithmen zu vergleichen. Wenn Sie sich also ein paar Minuten Zeit nehmen möchten, um die Benchmarks auszuführen, sollten Sie es versuchen. Hier ist eine Zusammenfassung der Ergebnisse.
Zunächst ist zu beachten, dass bei Betrachtung der einzelnen Benchmarks festgestellt wird, dass unsere DP5
(Dormand-Prince Order 5) und DP8
Methoden schneller sind als die Hairer Fortran-Codes ( dopri5
und dop853
). Daher sind diese Implementierungen sehr gut optimiert . Diese zeigen, dass, wie in einem anderen Thread angemerkt, die Überbeanspruchung der Dormand-Prince-Methoden darauf zurückzuführen ist, dass die Methoden bereits geschrieben wurden und nicht darauf, dass sie immer noch die besten sind. Der tatsächliche Vergleich zwischen den am besten optimierten Implementierungen besteht also zwischen den Tsitorous-Methoden, den Verner-Methoden und den Feagin-Methoden von DifferentialEquations.jl.
Die Ergebnisse
Im Allgemeinen haben die Verfahren mit einer Bestellung von mehr als 7 zusätzliche Berechnungskosten, die in der Regel aufgrund der gewählten Toleranzen nicht aufgewogen werden. Ein Grund dafür ist, dass die Koeffizientenauswahl für Methoden niedrigerer Ordnung optimiert ist (sie haben kleine "Hauptabschneidungsfehlerkoeffizienten", die wichtiger sind, wenn Sie nicht asymtopisch klein sind). Sie können sehen, dass die Methoden Verner Efficient 6 und 7 bei vielen Problemen wie hier sehr gut funktionieren, aber Methoden wie die Verner Efficient 8 können eine geringere Steigung aufweisen. Dies liegt daran, dass sich die "Gewinne" höherer Ordnung bei niedrigeren Toleranzen addieren, sodass es immer eine Toleranz gibt, bei der die Methoden höherer Ordnung effizienter sind.
Die Frage ist aber dann, wie niedrig? In einer gut optimierten Implementierung wird dies aus zwei Gründen ziemlich niedrig. Der erste Grund ist, dass Methoden niedrigerer Ordnung so genannte FSAL implementieren (first same as last). Diese Eigenschaft bedeutet, dass die Methoden niedrigerer Ordnung eine Funktionsbewertung aus dem vorherigen Schritt im nächsten Schritt wiederverwenden und somit effektiv eine Funktionsbewertung weniger haben. Wenn dies richtig angewendet wird, führt eine Methode fünfter Ordnung (Tsitorous oder Dormand-Prince) tatsächlich 5 Funktionsbewertungen durch, anstatt der 6, die die Tableaus vorschlagen würden. Dies gilt auch für die Verner 6-Methode.
Der andere Grund ist auf Interpolationen zurückzuführen. Ein Grund für die Verwendung einer Methode sehr hoher Ordnung besteht darin, weniger Schritte zu unternehmen und einfach Zwischenwerte zu interpolieren. Um jedoch die Zwischenwerte zu erhalten, benötigt die Interpolationsfunktion möglicherweise mehr Funktionsauswertungen, als für den Schritt verwendet wurden. Wenn Sie sich die Verner-Methoden ansehenbenötigt die Order 8-Methode 8 zusätzliche Funktionsauswertungen, um eine Order 8-Interpolante zu erhalten. Oftmals liefern die Methoden niedriger Ordnung eine "freie" Interpolation, zum Beispiel haben die meisten Methoden 5. Ordnung eine freie Interpolation 4. Ordnung (keine zusätzlichen Funktionsbewertungen). Wenn Sie also Zwischenwerte benötigen (die Sie für ein gutes Diagramm benötigen, wenn Sie eine Methode hoher Ordnung verwenden), fallen zusätzliche versteckte Kosten an. Berücksichtigen Sie, dass diese interpolierten Werte für die Ereignisbehandlung und das Lösen von Verzögerungsdifferentialgleichungen wirklich wichtig sind, und Sie sehen, warum die zusätzlichen Interpolationskosten eine Rolle spielen.
Was ist also mit den Feagin-Methoden?
Sie werden also feststellen, dass die Feagin-Methoden in den Benchmarks verdächtig fehlen. Sie sind in Ordnung, Konvergenztests arbeiten mit willkürlichen Präzisionszahlen usw., aber um sie tatsächlich zu verbessern, müssen Sie nach absurd niedrigen Toleranzen fragen. Zum Beispiel fand ich in unveröffentlichten Benchmarks, dass die Feagin14
Outperformance Vern9
(die Verner Efficient Method 9. Ordnung) bei Toleranzen wie 1e-30
. Für Anwendungen mit chaotischer Dynamik (wie bei den Pleides- oder 3-Körper-Astrophysik-Problemen) möchten Sie möglicherweise diese Genauigkeit aufgrund der empfindlichen Abhängigkeit (Fehler in chaotischen Systemen verstärken sich schnell). Die meisten Leute rechnen jedoch wahrscheinlich mit Gleitkommazahlen mit doppelter Genauigkeit, und ich habe keinen Benchmark gefunden, bei dem sie in diesem Bereich der Toleranz eine Outperformance erzielen.
Darüber hinaus gibt es keine Interpolation, die mit den Feagin-Methoden einhergeht. Also setze ich einfach eine Hermite-Interpolation dritter Ordnung auf sie, so dass eine existiert (und das funktioniert überraschend gut). Wenn es jedoch keine Standardinterpolationsfunktion gibt, können Sie die rekursive Hermite-Methode ausführen (verwenden Sie diese Interpolation, um den Mittelpunkt zu erhalten, und dann eine Interpolation 5. Ordnung usw.), um eine Interpolation höherer Ordnung zu erhalten. Dies ist jedoch sehr kostspielig und das Ergebnis Die Interpolation hat nicht unbedingt einen niedrigen prinzipiellen Trunkierungsfehlerterm (daher ist es nur gut, wenn er dt
wirklich klein ist, was genau das Gegenteil des von uns gewünschten Falls ist!). Wenn Sie also jemals eine wirklich gute Interpolation benötigen, die zu Ihrer Genauigkeit passt, müssen Sie zumindest auf so etwas wie zurückgreifen Vern9
.
Hinweis zur Extrapolation
Es ist zu beachten, dass Extrapolationsmethoden einfach Algorithmen zum Erzeugen von Runge-Kutta-Methoden beliebiger Ordnung sind. Für ihre Reihenfolge machen sie jedoch mehr Schritte als nötig und haben hohe prinzipielle Trunkierungsfehlerkoeffizienten, so dass sie bei einer gegebenen Reihenfolge nicht so effizient sind wie eine gut optimierte RK-Methode. In Anbetracht der vorherigen Analyse bedeutet dies jedoch, dass es einen Bereich mit äußerst geringer Toleranz gibt, in dem diese Methoden eine bessere Leistung erbringen als die "bekannten" RK-Methoden. Aber in jedem Benchmark, den ich gelaufen bin, scheint es, dass ich nicht so tief gekommen bin.
Hinweis zur Stabilität
Die Wahl hat wirklich nichts mit Stabilitätsproblemen zu tun. Wenn Sie die Tableaus von DifferentialEquations.jl durchgehen (dies ist nur plot(tab)
für die Stabilitätsbereiche möglich), werden Sie feststellen, dass die meisten Methoden verdächtig ähnliche Stabilitätsbereiche aufweisen. Dies ist eigentlich eine Wahl. In der Regel führt der Autor beim Ableiten der Methoden die folgenden Aktionen aus:
- Ermitteln der niedrigsten Hauptabschneidungsfehlerkoeffizienten (d. H. Der Koeffizienten für die Terme nächster Ordnung)
- Vorbehaltlich der Bestellbedingungen
- Und machen Sie den Stabilitätsbereich dem der Dormand-Prince-Order-5-Methode nahe.
Warum die letzte Bedingung? Nun, da diese Methode bei der Auswahl der PI-gesteuerten adaptiven Schrittgröße in der Regel immer stabil ist, ist sie ein guter Balken für Stabilitätsbereiche, die "gut genug" sind. Es ist also kein Zufall, dass die Stabilitätsbereiche alle ähnlich sind.
Fazit
Es gibt Kompromisse bei jeder Wahl der Methode. Die RK-Methoden höchster Ordnung sind bei niedrigeren Toleranzen einfach nicht so effizient, weil es schwieriger ist, die Auswahl der Koeffizienten zu optimieren, und weil die Anzahl der Funktionsbewertungen zusammengesetzt ist (und bei Interpolationen sogar noch schneller wächst). Wenn die Toleranz jedoch niedrig genug wird, gewinnt sie, aber die erforderlichen Toleranzen können weit unter "Standard" -Anwendungen liegen (dh wirklich nur für chaotische Systeme anwendbar).