Kann ich ein explizites Zeitschrittschema verwenden, um numerisch zu bestimmen, ob eine ODE steif ist?


10

Ich habe eine ODE:

u ( 0 ) = - 1u=1000u+sin(t)
u(0)=11000001

Ich weiß, dass diese spezielle ODE analytisch steif ist. Ich weiß auch, dass wenn wir eine explizite (Vorwärts-) Zeitschrittmethode verwenden (Euler, Runge-Kutta, Adams usw.), die Methode sehr große Fehler zurückgeben sollte, wenn der Zeitschritt zu groß ist. Ich habe also zwei Fragen:

  1. Werden so steife ODEs im Allgemeinen bestimmt, wenn ein analytischer Ausdruck für den Fehlerterm nicht verfügbar oder ableitbar ist?

  2. Wie bestimme ich im Allgemeinen einen Zeitschritt, der "klein genug" ist, wenn die ODE steif ist?


Es gibt Standardmethoden zum Erkennen der Steifheit mit expliziten Methoden. Ich platziere diesen Kommentar hier, weil es schwierig sein kann, meine detailliertere Antwort weit unten zu finden.
David Ketcheson

Antworten:


6

So beantworten Sie Ihre Fragen:

  1. Soweit ich weiß, erfordern explizite Methoden in der Praxis außerordentlich kleine Zeitschritte im Verhältnis zu Ihrer interessierenden Zeitskala (siehe Antworten auf diese Frage, was es bedeutet, dass eine ODE steif ist ), um genaue Ergebnisse zu erzielen In jeder Hinsicht ist Ihr Problem steif. Um die Anforderungen an die Schrittgröße zu bestimmen, verlassen Sie sich auf eine der vielen Bibliotheken, die von Experten geschrieben wurden (die MATLAB-Suite ist ein Beispiel, auch SUNDIALS, VODE, DASPK, DASSL, LSODE usw.), die über adaptive Heuristiken für Zeitschritte verfügen. Das SUNDIALS-Handbuch erläutert die Entscheidungsregeln, die zur Bestimmung der Größe der Zeitschritte verwendet werden, die das Paket benötigt, und gibt Ihnen ein Beispiel für Regeln, die in der Praxis verwendet werden.

  2. Auch hier würde ich in der Praxis eine Bibliothek mit adaptiven Zeitschritten verwenden, da dies effizienter ist. Wenn Sie jedoch eine Methode selbst mit festen Schrittgrößen codieren, große Schwingungen bemerken oder Ihre Lösung "explodiert", würden Sie vermuten, dass Ihr Zeitschritt zu groß ist, und ihn reduzieren. Wiederholen Sie diesen Vorgang, bis Sie eine einigermaßen gut erzogene numerische Lösung erhalten. Lehrbücher wie Ascher und Petzold sowie Hairer und Wanner haben gute Beispiele für dieses Phänomen.


9

Eine bessere Sichtweise ist, dass bei einem steifen Problem jede stabile explizite Berechnung zu einem Fehler führt, der viel kleiner als die erforderliche Fehlertoleranz ist .

Es gibt viele gute Methoden zum automatischen Erkennen der Steifheit mithilfe expliziter Schemata, insbesondere eingebettete Runge-Kutta-Paare. Siehe zum Beispiel:

In Faleichiks zweitem Beispiel würde man bei einer Verringerung der Schrittgröße eine plötzliche dramatische Abnahme des Fehlers auf Werte sehen, die weit unter einer typischen gewünschten Toleranz liegen, wenn die stabile Zeitschrittschwelle überschritten wird. Ein guter Fehlerschätzer würde also tatsächlich die Steifheit des Problems offenbaren. Bei dem ersten Problem würde der mit einer stabilen Schrittgröße erhaltene Fehler im Bereich der typischen gewünschten Toleranz liegen, was auf eine Nichtsteifigkeit hinweist.

Beachten Sie daher, dass jedes Problem nicht steif wird, wenn eine ausreichend strenge Fehlertoleranz erforderlich ist.


2
Das waren Papiere, auf die ich gerade verlinken wollte, bevor ich Ihre Antwort sah. +1 natürlich. :) Lassen Sie mich auch dies , das und schließlich das hinzufügen . Dies ist definitiv ein gut untersuchtes Problem ...
JM

9

1. Können wir die Steifheit numerisch erkennen, indem wir explizite Methoden anwenden?

  • [0,10]τ=1 τ

    Geben Sie hier die Bildbeschreibung ein

    τ=0.1Geben Sie hier die Bildbeschreibung ein

    τ=0.1[0,10]

    Ist das Problem also steif? Die Antwort lautet NEIN ! Hier ist eine kleine Schrittgröße erforderlich, um die Lösungsschwingungen korrekt wiederzugeben .

    y(t)=2cosπt,y(0)=1.

  • τ=1

    Geben Sie hier die Bildbeschreibung ein

    τ=0.1

    Geben Sie hier die Bildbeschreibung ein

    τ=0.1[0,10]

    Ist das Problem steif? JA ! Wir haben sehr kleine Schritte unternommen, um die Lösung zu reproduzieren, die sich sehr langsam ändert. Das ist irrational! Die Größe des Zeitschritts ist hier durch die Stabilitätseigenschaften von explizitem Euler begrenzt .

    Dieses Problem ist

    y(t)=2y(t)+sint/2,y(0)=1.


Schlussfolgerung: Die Informationen zu Zeitschritten und entsprechenden Fehlern reichen nicht aus, um die Steifheit zu erkennen. Sie sollten sich auch die erhaltene Lösung ansehen. Wenn es langsam variiert und die Schrittweite sehr klein ist, ist das Problem höchstwahrscheinlich steif. Wenn die Lösung schnell schwingt und Sie Ihrer Fehlerschätzungstechnik vertrauen, ist dieses Problem nicht schwerwiegend.


2. Wie kann die maximale Schrittweite ermittelt werden, die es ermöglicht, ein steifes Problem mit einer expliziten Methode zu integrieren?

Wenn Sie einen expliziten Black-Box-Solver mit automatischer Schrittsteuerung verwenden, brauchen Sie nichts zu tun: Die Software nimmt die erforderliche Schrittgröße adaptiv an.

[Λ,0]Λ=1000

[2,0]τΛτ

τ2|Λ|.

τ1|Λ|,
1/|Λ|<τ2/|Λ|

Natürlich ist eine solche Analyse hauptsächlich für lineare Probleme mit bekanntem Spektrum anwendbar. Für praktischere Probleme sollten wir uns auf numerische Methoden zur Erkennung der Steifheit verlassen (siehe Referenzen und Kommentare in anderen Antworten).


Wie in einigen der von David verlinkten Arbeiten erwähnt, ist die Potenzmethode zum Auffinden dominanter Eigenwerte (geeignet modifiziert) eine übliche Wahl für Jacobi-basierte Steifigkeitsdetektoren.
JM
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.