Reading Time: 11 minutes

Eine zeitabhängige Simulation kann gut formuliert aussehen und einen expliziten Solver dennoch dazu zwingen, Tausende von extrem kleinen Schritten zu machen. Eine Erhöhung der Bestellung von vorwärts euler auf RK4 kann das Problem verzögern, beseitigt es jedoch nicht immer. Das System kann steif sein.

Die Steifheit tritt auf, wenn die numerische Stabilität einen viel kleineren Zeitschritt erfordert als der Schritt, um das Verhalten von wissenschaftlichem Interesse aufzulösen. Schnelle Komponenten können fast sofort abklingen, während langsamere Komponenten die Langzeitlösung steuern. Ein expliziter Integrator muss für beide stabil bleiben.

Implizite steife Solver können schnell abfallende Modi überschreiten, da sich ihre Stabilitätsbereiche viel weiter in die linke Hälfte der komplexen Ebene erstrecken. Der Kompromiss besteht darin, dass jeder akzeptierte Schritt eine Bewertung der Jacobian, eine Matrixfaktorisierung, eine iterative lineare Algebra oder eine nichtlineare Lösung erfordert.

Die richtige Frage ist daher nicht, ob implizite Methoden immer besser sind. Es geht darum, ob die Rechenkosten eines impliziten Schritts niedriger sind als die Kosten der vielen kleinen expliziten Schritte, die für die Stabilität erforderlich sind.

Der breitere Leitfaden Zeitintegrationsmethoden für PDE Solvers vergleicht explizite, implizite und IMEX-Ansätze. Dieser Artikel konzentriert sich speziell auf Steifigkeit, Stabilitätsregionen, Jacobien und steife Solver-Familien.

Was Steifigkeit bedeutet

Es gibt keine einzige Definition der Steifigkeit, die perfekt für jedes nichtlineare System, numerische Methode, Toleranz und Integrationsintervall gilt.

Eine nützliche praktische Beschreibung ist:

Ein Problem ist steif, wenn eine numerische Methode Schritte ausführen muss, die aufgrund von Stabilitätsbeschränkungen viel kleiner als die für die Genauigkeit erforderliche Skala sind.

Diese Definition unterstreicht, dass die Steifigkeit teilweise vom Löser abhängt. Ein Problem, das für eine explizite Runge-Kutta-Methode steif ist, kann für eine L-stabile implizite Methode beherrschbar sein.

Es hängt auch von der angeforderten Ausgabe ab. Ein schneller chemischer Übergang kann in einer Studie wissenschaftlich wichtig und in einer anderen irrelevant sein. Wenn es aufgelöst werden muss, ist ein kleiner Schritt eine Genauigkeitsanforderung und nicht eine unnötige Steifigkeitsbeschränkung.

Ein einfaches steifes System

Betrachten Sie zwei abfallende Komponenten:

dy₁/dt = -y₁

dy₂/dt = -1000y₂

Die genauen Lösungen sind:

y₁(t) = y₁(0)e⁻ᵗ

y₂(t) = y₂(0)e⁻¹⁰⁰⁰ᵗ

Die zweite Komponente verschwindet viel schneller als die erste. Die wissenschaftlich relevante Lösung kann nach ihrer anfänglichen vorübergehenden Lösung fast vollständig durch y₁ gesteuert werden.

Vorwärts-Euler, der auf die zweite Gleichung angewendet wird, ist nur stabil, wenn:

|1 - 1000Δt| ≤ 1

Das gibt:

0 ≤ Δt ≤ 0.002

Der Solver muss auch nach dem Vernachlässigen von y₂ einen Schritt in der Nähe dieser Skala fortsetzen. Die langsame Komponente könnte mit viel größeren Schritten genau dargestellt werden, aber die explizite Stabilität wird durch den schnellen Modus gesteuert.

Warum das Steifigkeitsverhältnis unvollständig ist

Für ein lineares System:

dy/dt = Ay

Ein häufig angegebenes Steifigkeitsverhältnis ist:

κ =
max |Re(λᵢ)|
/
min |Re(λᵢ)|

Das Verhältnis kann informativ sein, wenn alle relevanten Eigenwerte negative Realteile haben und sich die Matrix regelmäßig verhält. Ein großer Wert deutet auf weit voneinander getrennte Zerfallsraten hin.

Es ist jedoch kein universeller Test. Es enthält nicht das Integrationsintervall, die angeforderte Genauigkeit, die Anfangsbedingung oder die Richtung, in der sich die Lösung entwickelt. Es kann auch undefiniert oder irreführend werden, wenn der Jacobian keine Eigenwerte, Erhaltungsmodi oder ein stark nicht normales Verhalten enthält.

In einem nichtlinearen System ändert sich der Jacobian entlang der Flugbahn:

J(t) =
∂f
/
∂y
evaluated at y(t)

Ein System kann sich daher während einer Simulation zwischen steifen und nicht steifen Regionen bewegen.

Jacobi-basierte Indikatoren

Eigenwertschätzungen des lokalen Jacobian sind nützlich, da schnelle stabile Modi mit Eigenwerten assoziiert sind, die große negative Realteile haben.

Ein billigerer Indikator verwendet manchmal die skalierte Spur:

τ(J) =
trace(J) / d
=
div(f) / d

über ein Integrationsintervall mit Kennlänge T, ein stark negativer Wert von:

T trace(J) / d

kann eine schnelle Phasenvolumenkontraktion und mögliche explizite Schrittbeschränkungen anzeigen.

Dies ist ein heuristischer Indikator, keine notwendige und ausreichende Definition der Steifheit. Eine Spur mittelt die Eigenwerte der Eigenwerte und kann eine stark steife Richtung verbergen, wenn andere Richtungen sie kompensieren.

Nicht-normale Systeme können auch vorübergehendes Wachstum aufweisen, das nicht zuverlässig durch Eigenwerte oder Spuren allein vorhergesagt wird. Logarithmische Normen, direkte Solver-Diagnose und beobachtete Einschränkungen der Schrittgröße können zusätzliche Informationen liefern.

Der mathematische Hintergrund ist in Der Überblick über steife Gleichungen zusammengefasst. Eine tiefere Analyse, warum die Steifigkeit einer einfachen auf Eigenwerten basierenden Definition widersteht, finden Sie in Steifheit der Oden .

Praktische Anzeichen von Steifheit

Ein Modell kann steif sein, wenn:

  • Eine adaptive explizite Methode reduziert wiederholt ihren Schritt trotz einer reibungslosen Lösung.
  • Der explizite Solver macht viele Schritte, nachdem ein schneller Transient bereits verfallen ist.
  • Eine kleine Änderung der Schrittweite schaltet die Berechnung von stabil zu explosiv.
  • Der Jacobian enthält stark negative Modi mit sehr unterschiedlichen Skalen.
  • Ein impliziter Solver schließt die gleiche Berechnung mit weit weniger akzeptierten Schritten ab.
  • Chemische Reaktionen, Diffusions-, Relaxations- oder Strafbedingungen führen sehr kurze Zeitskalen ein.

Diese Symptome sollten nicht verwendet werden, um mögliche Codierungs- oder Modellierungsfehler zu verwerfen. Falsche Vorzeichen, Einheiten, Randbedingungen oder Jacobis können ein Verhalten erzeugen, das der Steifheit ähnelt.

Die Dahlquist-Testgleichung

Stabilität wird häufig untersucht mit:

dy/dt = λy

Die genaue Lösung nach einem Schritt ist:

y(t + Δt) =
e^(λΔt)y(t)

Eine numerische Methode erzeugt:

yⁿ⁺¹ =
R(z)yⁿ

z = λΔt

Die Funktion R(z) ist die Stabilitätsfunktion. Die Methode ist absolut stabil, wenn:

|R(z)| ≤ 1

Die Menge aller dieser Werte bildet den absoluten Stabilitätsbereich.

Eine klare Einführung in die Dahlquist-Gleichung und die A-Stabilität finden Sie in den Anmerkungen zu IIT Numerical Analysis .

Warum explizite Methoden scheitern

Vorwärts hat Euler:

R(z) = 1 + z

Sein Stabilitätsbereich ist eine Scheibe, die bei −1 mit dem Radius eins zentriert ist. Entlang der negativen realen Achse:

−2 ≤ z ≤ 0

Klassische RK4 hat eine größere Region, die sich bis zu ca.:

z ≈ −2.785

es ist immer noch begrenzt. Keine explizite Runge-Kutta-Methode kann a-stabil sein.

Wenn ein Jacobian-Eigenwert ungefähr −1000 ist, erfordert RK4 einen Schritt kleiner als ungefähr:

Δt ≲ 2.785 / 1000

Eine explizite Methode höherer Ordnung verbessert die Genauigkeit und kann das stabile Intervall vergrößern, aber es kann die Stabilität nicht beliebig weit entlang der negativen realen Achse verlängern.

A-Stabilität

Eine A-stabile Methode enthält die gesamte linke Halbebene in ihrem Stabilitätsbereich:

Re(z) ≤ 0
⇒
|R(z)| ≤ 1

Rückwärts Euler ist a-stabil, weil:

R(z) =
1 / (1 - z)

Bei Modi mit negativen Realteilen bleibt das Verfahren unabhängig von der Schrittgröße stabil.

Dies bedeutet nicht, dass ein beliebig großer Schritt genau ist. A-Stabilität beseitigt eine Stabilitätsbeschränkung, beseitigt jedoch keinen Abschneidefehler.

L-Stabilität

Eine L-stabile Methode ist a-stabil und erfüllt auch:

R(z) → 0
as
z → -∞

Diese Eigenschaft dämpft ungelöste schnelle Modi stark. Rückwärts Euler ist L-stabil.

Crank-Niconson ist a-stabil, aber nicht L-stabil. Seine Stabilitätsfunktion ist:

R(z) =
(1 + z/2)
/
(1 - z/2)

Als z → -∞ nähert sich der Faktor −1. Eine sehr steife Komponente kann sich im Vorzeichen abwechseln, anstatt schnell zu zerfallen. Dies kann zu nicht-physikalischen Oszillationen führen, obwohl die Methode begrenzt bleibt.

L-Stabilität ist besonders wertvoll, wenn schnelle Transienten verschwinden sollten, anstatt in der berechneten Lösung sichtbar zu bleiben.

Das Prothero-Robinson-Problem

Das Prothero-Robinson-Testproblem hat die allgemeine Form:

dy/dt =
λ[y - g(t)]
+ g'(t)

Seine genaue Lösung ist:

y(t) =
g(t)
+
[y(0) - g(0)]e^(λt)

Auswählen:

g(t) = sin(t)

gibt:

dy/dt =
λ[y - sin(t)]
+ cos(t)

und:

y(t) =
sin(t)
+
y(0)e^(λt)

Wenn g(0)=0.

Für ein großes negatives λ zerfällt der exponentielle Übergang schnell, während das reibungslose Forcen sin(t) verbleibt. Eine explizite Methode kann immer noch gezwungen sein, den schnell abfallenden Modus für die Stabilität aufzulösen.

Das Problem wird auch verwendet, um die steife Auftragsreduzierung zu untersuchen. Einige Methoden erreichen ihre nominale Konvergenzreihenfolge nicht, wenn Steifheit, Erzwingen und Grenz- oder Einschränkungseffekte interagieren.

Python-Vergleich mit SciPy

Das folgende Beispiel vergleicht eine explizite Methode mit zwei steifen Lösern:

import numpy as np

from scipy.integrate import solve_ivp

stiffness = -1000.0
time_interval = (0.0, 10.0)
initial_state = [1.0]

def right_hand_side(time, state):
    value = state[0]

    return [
        stiffness
        * (value - np.sin(time))
        + np.cos(time)
    ]

def jacobian(time, state):
    return np.array([
        [stiffness]
    ])

def exact_solution(time):
    return (
        np.sin(time)
        + np.exp(stiffness * time)
    )

methods = [
    ("RK45", {}),
    ("Radau", {"jac": jacobian}),
    ("BDF", {"jac": jacobian}),
    ("LSODA", {})
]

for method, options in methods:
    solution = solve_ivp(
        fun=right_hand_side,
        t_span=time_interval,
        y0=initial_state,
        method=method,
        rtol=1e-7,
        atol=1e-9,
        **options
    )

    reference = exact_solution(
        solution.t
    )

    maximum_error = np.max(
        np.abs(
            solution.y[0]
            - reference
        )
    )

    print(method)
    print("  Success:", solution.success)
    print("  Accepted points:", solution.t.size)
    print("  Function evaluations:", solution.nfev)
    print("  Jacobian evaluations:", solution.njev)
    print("  LU factorizations:", solution.nlu)
    print("  Maximum error:", maximum_error)

Die genauen Zählungen hängen von Toleranzen, Softwareversion, Anfangszustand, Jacobian-Informationen und Solver-Einstellungen ab. Der wichtige Vergleich ist die Gesamtberechnungskosten bei gleicher Fehlerstufe.

Familien von steifen Lösern

Kein einzelner Solver ist für jedes steife System am besten geeignet. Wichtige Überlegungen sind:

  • Systemdimension
  • Jacobianische Sparsamkeit und Bandbreite
  • Kosten der Bewertung der rechten Seite
  • Verfügbarkeit analytischer Derivate
  • angeforderte Toleranz
  • Vorhandensein von Einschränkungen oder einer Massenmatrix
  • ob sich das Problem zwischen steifen und nicht steifen Phasen ändert

Rückwärtsdifferenzierungsformeln

BDF-Methoden sind implizite mehrstufige Formeln. Sie approximieren die Ableitung unter Verwendung mehrerer früherer Lösungswerte und bewerten die maßgebliche Gleichung zum neuen Zeitpunkt.

Eine BDF-Formel erster Ordnung ist rückwärts Euler:

(
    yⁿ⁺¹ - yⁿ
) / Δt
=
f(tⁿ⁺¹, yⁿ⁺¹)

BDF2 verwendet zwei vorherige Werte:

(
    3yⁿ⁺¹
    - 4yⁿ
    + yⁿ⁻¹
) / (2Δt)
=
f(tⁿ⁺¹, yⁿ⁺¹)

Implementierungen mit variabler Ordnung können mehrere BDF-Bestellungen verwenden und sowohl die Reihenfolge als auch die Schrittgröße anpassen. Bestellungen eins und zwei sind a-stabil. BDF-Formeln höherer Ordnung opfern die volle A-Stabilität, bleiben aber für viele steife Systeme nützlich.

BDF-Methoden sind häufig für große Systeme wirksam, wenn der Jacobian spärlich ist und ein geeigneter linearer Löser oder Vorkonditionierer verfügbar ist.

Beispiele hierfür sind die BDF von Scipy, die Matlab ode15s, die Sonnenuhren Cvode BDF und die SCIML-Methoden wie QNDF und FBDF.

Rosenbrock-Methoden

Rosenbrock-Methoden sind linear implizite Runge-Kutta-Methoden. Sie linearisieren die Bühnengleichungen und lösen Systeme der Form:

(
    I - γΔtJ
)kᵢ
=
known stage terms

Dies vermeidet eine vollständige nichtlineare Lösung in jeder Phase. Die Methode erfordert immer noch Jacobi-Informationen oder eine nützliche Annäherung.

Rosenbrock-Methoden sind häufig für kleine und mittlere steife Systeme wirksam, insbesondere bei strengen Toleranzen. Die gleiche Matrixstruktur kann über mehrere Stufen wiederverwendet werden.

Beispiele im SCIML-Ökosystem sind:

  • Rosenbrock23
  • Rodas4
  • Rodas5P

Die aktuelle sciml Rosenbrock-Dokumentation enthält methodenspezifische Empfehlungen und Implementierungsdetails.

SDIrk-Methoden

Sdirk bedeutet implizit implizit Runge-Kutta . Jede implizite Stufe verwendet den gleichen Diagonalkoeffizienten in der Runge-Kutta-Matrix.

Dadurch entstehen Bühnensysteme mit wiederholter Struktur:

(
    I - γΔtJ
)kᵢ
=
stage residual

Eine Matrixfaktorisierung oder ein Vorkonditionierer kann daher schrittweise wiederverwendet werden, wenn der Jacobian festgehalten wird.

SDIrk-Methoden sind einstufige Methoden, wodurch sie nach Ereignissen oder Diskontinuitäten leichter neu gestartet werden können als mehrstufige BDF-Formeln.

Beispiele sind Esdirk- und Kencarp-Methoden. Einige liefern L-Stabilität und eingebettete Fehlerschätzungen.

TR-BDF2

TR-BDF2 ist eine zusammengesetzte einstufige Methode. Es kombiniert eine Trapez-Regel-Stufe mit einer Rückwärtsdifferenzierungsstufe zweiter Ordnung.

Es sollte nicht mit gewöhnlichen BDF-Solvern mit variabler Ordnung gruppiert werden. Seine spezielle Konstruktion bietet Genauigkeit zweiter Ordnung und starke Stabilitätseigenschaften, einschließlich L-Stabilität für die Standardparameterauswahl.

TR-BDF2 ist oft eine praktische Allzweck-Steifmethode, wenn mäßige Ordnung und robuste Dämpfung wichtiger sind als eine sehr hohe asymptotische Ordnung.

Vollständig implizite Runge-Kutta-Methoden

Firk bedeutet Voll implizite Runge-Kutta. Die Stufen sind gekoppelt und erfordern normalerweise das Lösen eines größeren nichtlinearen Systems.

Wichtige Familien sind:

  • Radau IIa-Methoden
  • Gauss-Legendre-Methoden
  • Lobatto-Methoden

RADAU IIA-Methoden können hohe Ordnung, A-Stabilität und L-Stabilität bieten. Sie sind attraktiv für steife Probleme mit hoher Genauigkeit, können jedoch höhere Kosten pro Schritt haben als Rosenbrock-, SDIrk- oder BDF-Methoden.

Der Radau-Solver von Scipy basiert auf einer Radau IIA-Methode fünfter Ordnung.

Stabilisierte explizite Methoden

Stabilisierte explizite Methoden verwenden speziell konstruierte Stabilitätspolynome, um das stabile Intervall entlang der negativen realen Achse zu verlängern.

Beispiele sind:

  • RKC-Methoden
  • rock2
  • Rock4

Bei einem Verfahren mit s-Stufen kann das stabile Intervall ungefähr wie wachsen. Dies macht den Ansatz für große diffusionsdominierte Systeme nützlich, bei denen das Jacobi-Spektrum hauptsächlich nahe der negativen realen Achse liegt.

Diese Methoden sind nicht a-stabil und lösen nicht jede Art von Steifheit. Sie können ungeeignet sein, wenn das System erhebliche imaginäre Eigenwerte, eine stark nichtlineare Reaktionssteifigkeit, differential-algebraische Einschränkungen oder eine schwierige Kopplung aufweist.

Das EPFL-Material zu stabilisierten expliziten Methoden veranschaulicht, wie Chebyshev-basierte Methoden die Stabilitätsdomäne erweitern.

IMEX-Methoden

Wenn die Steifheit von der nicht steifen Dynamik getrennt werden kann, kann eine implizit-explizite Methode effizienter sein als die Behandlung des gesamten Systems implizit:

dy/dt =
f_nonstiff(y)
+
f_stiff(y)

Der nicht steife Begriff wird explizit integriert, während der steife Begriff implizit integriert wird.

Beispiele sind die explizit und diffusionsbehandelte Advektion oder der Transport explizit behandelt und chemische Reaktionen implizit behandelt.

IMEX-Methoden erfordern eine physikalisch und numerisch aussagekräftige Operatorsplit. Ihre Stabilität hängt vom vollständig explizit impliziten Paar ab.

Automatische Steifigkeitsumschaltung

Einige Algorithmen schätzen die Steifigkeit, während sie integrieren und zwischen nicht steifen und steifen Formeln wechseln.

LSODA wechselt zwischen einer Adams-Methode und einer BDF-Methode. Es ist über Odepack, SciPy und mehrere Sprachschnittstellen verfügbar.

Im SCIML-Ökosystem kann eine automatische Methode einen expliziten Algorithmus mit einem steifen Solver kombinieren, zum Beispiel:

AutoTsit5(
    Rosenbrock23()
)

Das automatische Umschalten ist nützlich, wenn die Steifigkeit unbekannt ist oder nur während eines Teils der Flugbahn auftritt. Die Erkennung ist nicht perfekt, daher können schwierige Probleme immer noch von der direkten Auswahl eines steifen Solvers profitieren.

Die aktuelle sciml ODE-Solver-Anleitung empfiehlt automatische Umschaltmethoden, wenn die Steifheit ungewiss ist.

Der Jacobian ist wichtig

Für einen impliziten Schritt kann der nichtlineare Rest sein:

G(yⁿ⁺¹) =
yⁿ⁺¹
- yⁿ
- Δt f(tⁿ⁺¹, yⁿ⁺¹)

Die Newton-Methode erfordert:

[
    I
    - ΔtJ
]δ
=
-G

wo:

J =
∂f / ∂y

Die lineare Lösung kann die Laufzeit dominieren. Ein steifer Solver wird schlecht funktionieren, wenn er einen großen spärlichen Jacobian als dichte Matrix behandelt.

Die Leistung kann sich verbessern durch:

  • Ein analytischer Jacobian
  • Automatische Differenzierung
  • ein deklariertes Sparsity-Muster
  • Gebänderte Matrixspeicherung
  • Spärliche direkte Faktorisierung
  • Krylov-Methoden
  • Physikbasierte Vorkonditionierung
  • Matrixfreie Jacobi-Vektor-Produkte

Das SCIML-Tutorial zu Lösen großer steifer Gleichungen zeigt, wie sich die Struktur und die Auswahl der linearen Solver auf die Leistung auswirken.

Löser-Auswahlhandbuch

Problemcharakteristik Möglicher Ausgangspunkt Hauptüberlegung
Nicht steife glatte Ode adaptive explizite rk Niedrige Kosten pro Schritt
kleines oder mittleres steifes System Rosenbrock- oder Radau-Methode Genauigkeit, Jacobi-Kosten und Toleranz
Großes spärliches steifes System BDF, Rosenbrock oder Sdirk mit spärlicher linearer Algebra Jacobi-Struktur ist wichtiger als eine Schwellenwert für feste Größen
Hochgenaue steife Integration RADAU IIA oder HOCHRÖSSEN ROSENBROCK Größere Bühne und lösen die Kosten
Diffusionsdominierte milde Steifheit rkc oder rock Das Spektrum sollte hauptsächlich in der Nähe der negativen realen Achse liegen
Trennbare steife und nicht steife Physik IMEX-Methode Benötigt eine geeignete Operatorsplit
unbekannte oder sich ändernde Steifheit LSODA oder explizit-implizite automatische Umschaltung Die Erkennung erhöht die Komplexität, aber wenig manuelles Tuning
DAE oder Massenmatrixproblem DAE-fähige BDF-, Radau- oder Rosenbrock-Methode ODE-Solver können algebraische Einschränkungen möglicherweise nicht richtig durchsetzen

Warum feste Dimensionsschwellen irreführend sind

Es ist verlockend, Rosenbrock-Methoden unter 1.000 Gleichungen, SDIrk-Methoden bis zu 10.000 und darüber hinaus BDF-Methoden zu empfehlen. Solche Schwellen sind nicht zuverlässig.

Ein dichtes 500-Gleichungs-Problem kann teurer sein als ein spärliches System, das Hunderttausende von Gleichungen enthält. Die entscheidenden Faktoren sind:

  • Anzahl der Jacobian-Einträge ungleich Null
  • Ausfüllen während der Faktorisierung
  • Qualität der Vorkonditionierer
  • rechte Seite Kosten
  • Erforderliche Toleranz
  • Häufigkeit von Jacobi-Updates
  • Verfügbarkeit von matrixfreien Produkten
  • Parallele Skalierbarkeit

Die Wahl des Solver sollte durch Vergleiche der Arbeitsgenauigkeit des tatsächlichen Problems getestet werden.

Das Beispiel der Flammenausbreitung

Das Beispiel für die Flammenausbreitung von Cleve Moler verwendet die nichtlineare skalare Gleichung:

dy/dt =
y²(1 - y)

Der Anfangswert ist sehr klein. Die Lösung bleibt für eine lange Induktionsperiode nahe Null, geht schnell über und nähert sich dann eins.

Im veröffentlichten MATLAB-Vergleich nahm der nicht-steife ode45-Solver 3.040 Schritte und 20.179 Funktionsauswertungen vor. Der steife Rosenbrock-basierte ode23s Solver nahm 99 Schritte und 412 Funktionsbewertungen an.

Dies sind ungefähr dreißigmal weniger akzeptierte Schritte, nicht ein Prozent der ursprünglichen Schrittzahl.

Das Beispiel und seine Lambert-W-Analyse werden in steifen Differentialgleichungen von Cleve Moler beschrieben.

Das Ergebnis sollte nicht als universeller dreißigfacher Vorteil für implizite Methoden interpretiert werden. Es zeigt, wie stark sich die Effizienz des Solvers ändern kann, wenn Stabilität und nicht Genauigkeit einen expliziten Integrator steuert.

Löser fair vergleichen

Ein fairer Benchmark sollte Methoden mit gleicher Genauigkeit vergleichen. Aufzeichnung:

  • Globaler Fehler oder Fehler in einer Menge von Interesse
  • Akzeptierte und abgelehnte Schritte
  • Rechte Auswertungen
  • Jacobianische Bewertungen
  • Lineare Lösungs- und Faktorisierungen
  • Nichtlineare Iterationen
  • Speicherverbrauch
  • Gesamt-Wanduhrzeit

Ein Löser, der weniger Schritte unternimmt, kann immer noch langsamer sein, wenn jeder Schritt eine teure Faktorisierung erfordert. Eine Methode mit mehr Funktionsbewertungen kann gewinnen, wenn die Funktion billig ist und die konkurrierende lineare Algebra kostspielig ist.

Häufige Fehler

  • Angenommen, jede abweichende explizite Lösung beweist Steifheit
  • Das Steifigkeitsverhältnis als endgültige Diagnose behandeln
  • Verwenden der Jacobian Trace als universelle Steifheitsdefinition
  • Angenommen, jede implizite Methode ist a-stabil
  • Angenommen, jede A-stabile Methode ist L-stabil
  • Aufrufen von TR-BDF2 als gewöhnliche Mehrschritt-BDF-Methode
  • Erweitern von Firk als explizite Runge-Kutta-Familie
  • Verwenden eines dichten Jacobian für ein großes spärliches System
  • Fehlen eines Jacobi- oder Sparsity-Musters, wenn der Solver eines verwenden kann
  • Auswählen eines Solvers nur aus der Anzahl der Gleichungen
  • Verwenden einer stabilisierten expliziten Methode für die Steifigkeit außerhalb ihres spektralen Designs
  • Vergleichen von Schrittzählungen ohne Fehler und Laufzeit zu vergleichen
  • Sehr große implizite Schritte ohne Überprüfung der zeitlichen Genauigkeit

Ein praktischer Arbeitsablauf

  1. Überprüfen Sie die Gleichungen, Einheiten, Zeichen und Anfangsbedingungen.
  2. Führen Sie eine adaptive explizite Methode als Diagnose aus.
  3. Überprüfen Sie akzeptierte Schritte, abgelehnte Schritte und minimale Schrittgröße.
  4. Schätzen oder analysieren Sie das Jacobi-Spektrum, wo dies praktikabel ist.
  5. Prüfen Sie, ob die schnellen Komponenten physikalisch aufgelöst werden müssen.
  6. Versuchen Sie es mit einem L-stabilen steifen Solver mit den gleichen Toleranzen.
  7. Liefern Sie Jacobi-Informationen und Sparsity.
  8. Vergleichen Sie Arbeit und Genauigkeit, nicht nur akzeptierte Schritte.
  9. Wiederholen Sie mit engeren Toleranzen.
  10. Dokumentenlöser, Toleranzen, lineare Algebra und Ausfallkriterien.

Verwandte Anleitungen

weiterlesen

Schlussfolgerung

Steifigkeit tritt auf, wenn die numerische Stabilität ein Verfahren dazu zwingt, schnelle Komponenten näher zu lösen als die gewünschte Ausgabe erfordert. Explizite Runge-Kutta-Methoden haben begrenzte Stabilitätsbereiche, sodass große negative Jacobi-Modi extrem kleine Schritte auferlegen können.

A-stabile implizite Methoden beseitigen diese Einschränkung der Stabilität der linken Hälfte. L-stabile Methoden gehen weiter, indem sie ungelöste schnelle Modi stark dämpfen. Diese Eigenschaften erklären, warum rückständige Euler-, BDF-, Rosenbrock-, SDIrk-, TR-BDF2- und Radau-Methoden explizite Löser auf steifen Systemen übertreffen können.

Kein einzelner Diagnose- oder Solver funktioniert für jedes Problem. Eigenwerte, Steifigkeitsverhältnisse, skalierte Divergenz und beobachtete Schrittbeschränkungen liefern alle Teilinformationen. Die Struktur des Jacobian und des linearen Solvers kann wichtiger sein als die nominale Anzahl von Gleichungen.

Stabilisierte explizite Methoden sind nützlich, wenn die Steifheit moderat ist und von Negativ-Real-Achsen-Eigenwerten dominiert wird. IMEX-Methoden funktionieren, wenn steife und nicht steife Operatoren getrennt werden können. Automatische Umschaltmethoden helfen, wenn sich das Regime während der Integration ändert.

Die endgültige Wahl sollte auf Arbeitsgenauigkeitsprüfungen basieren. Der beste steife Solver ist die Methode, die die erforderliche wissenschaftliche Genauigkeit mit den niedrigsten zuverlässigen Rechenkosten erreicht.