Runge-Kutta-Integration in negativer Richtung

Neue Frage »

ttr-racer Auf diesen Beitrag antworten »
Runge-Kutta-Integration in negativer Richtung
Hallo zusammen,
ich habe ein Problem bzw. eine Unsicherheit bei der Anwendung des klassischen Runge-Kutta-Verfahrens 4.Ordnung zur numerischen Integration von Differentialgleichungen. Konkret benutze ich das Verfahren zur Lösung von zwei vereinfachten Grenzschichtgleichungen, um die Grenzschichtdicke und einen Geschwindigkeitsparameter (ähnliche Geschwindigeitsprofile) zu bestimmen. Da ich zu Beginn der Rechnung Startwerte schätzen muss, kommt es zu einem kleinen "Einschwingvorgang" bis sich schließlich der gewünschte Verlauf ergibt. Jedoch ist dieser Einschwinger unerwünscht, da er physikalisch nicht sinnvoll ist und in nachfolgenden Rechenschritten zu Problemen führt. Um dies zu vermeiden möchte ich die Gleichungen nach Integration in positiver Richtung, unter Verwendung der zuletzt berechneten "wahren" Werte, nochmals in negativer Richtung zurückintegrieren, um den Verlauf im Anfangsbereich zu "glätten". Mir ist nun nicht ganz klar, wie sich die Vorzeichen im Runge-Kutta-Verfahren ändern.
Hat hier jemand Erfahrung dazu? Ich habe es natürlich ausprobiert und mir anhand einer analytisch lösbaren Modell-DGL das Verfahren zur Rückwärtsintegration getestet. Die RK-Iteration stimmte sowohl bei Integration in positiver Richtung als auch, mit geänderten Vorzeichen, in negativer Richtung mit der analytischen Kurve überein. Dies habe ich dann auf meine Grenzschichtgleichungen übertragen: Die berechnete Kurven stimmen anfänglich auch sehr gut mit den Kurven aus der "Hin-Integration" überein, jedoch biegen sie dann auf einmal sehr scharf ab und die Rechnung divergiert. Kann es sein das das Verfahren dann instabil wird und sich der Fehler exponentiell vergrößert (Abbiegen der Kurve ähnelt sehr stark einer Exponentialfunktion..)? Seltsamerweise funktionierte es, als ich der Schrittweite ein negatives Vorzeichen gab. Aus der Schulmathematik ist mir noch bekannt, das bei Integration in negativer Richtung das Vorzeichen negativ wird. Allerdings führte diese Vorzeichenvergabe bei meiner Test-Dgl zu einem falschen Verlauf.
Ich hoffe das ich mich verständlich ausgedrückt habe und wäre für jede Hilfe dankbar, auch von grundsätzlicher Natur (prinzipielle Umkehrung der Runge-Kutta-Iteration für negative Integrationsrichtung). Bei Unklarheiten kann ich auch noch zusätzliche Informationen posten. Vielen Dank!

Gruß

ttr-racer
fddas Auf diesen Beitrag antworten »

also wenn du per numerisches verfahren auf einem intervall a, b mit b>a in negativer x-richtung integrierst, musst du in deiner rkv-funktion einfach nur die intervallgrenzen beim funktionsaufruf vertauschen und eine negative schrittweite vorgeben.

in dieser form:
"normale integration": rkv (a,b,h, funktion)
"in negativer x-richtung": rkv(b,a,-h, funktion)

vllt musst du noch in deinem quellcode was verändern, da du vllt das ende der schleife anpassen musst o.ä.
ttr-racer Auf diesen Beitrag antworten »

Danke für die Antwort. Genau das habe ich probiert. Allerdings biegen die Kurven dann nach einer gewissen Lauflänge sehr stark ab. Ich habe 4 Bilder angehängt:

- Grenzschichtdicke ("d") bei Hin-Integration
- Grenzschichtdicke bei Rück-Integration

- Geschwindigkeitsparameter ("Vd") bei Hin-Integration
- Geschwindigkeitsparameter bei Rück-Integration

Man erkennt das Problem auf den Bildern sehr gut, wie ich denke.
sdfsd Auf diesen Beitrag antworten »

ist halt immer schwer ohne quellcode die fehler zu entdecken... ist deine diffgleichung vllt steif?? versuch das gleiche mal mit einem ode-solver für steife probleme.... weil sieht mir ganz danach aus... der fehler wird weniger im rückwärtsintegrieren liegen, sondern das das problem entweder steif oder aber schlecht konditioniert ist... bei einer schlechten konditionierung kannst du nur die ordnung deines ode-solver erhöhen um so eine zeitlich spätere divergenz zu erhalten
ttr-racer Auf diesen Beitrag antworten »

Welches Verfahren würdest du denn empfehlen? Müsste dann wohl auch implizit sein, vermute ich. Das die DGL bzw. die DGL's steif sind habe ich auch schon vermutet, allerdings müsste es dann doch auch Probleme bei der Hin-Integration geben? Mit Konditionierung meinst du wahrscheilich, wie sich die Startwerte auf die Berechnung auswirken? Die Lösung passt sich eigentlich recht schnell der wirklichen Kurve an, sofern die Startwerte nicht total daneben liegen.
Die Abhängigkeit von den Anfangswerten kann ich auch verringern, indem ich alternativ zu dem vorgeschlagenen Verfahren die Dgl iterativ mehrere Male durchrechne. Leider sehr aufwendig...
system-agent Auf diesen Beitrag antworten »

Für ein steifes Problem könntest du implizit Euler nehmen oder ein anderes BDF-Verfahren.
 
 
sdfsd Auf diesen Beitrag antworten »

implizites euler ist schon etwas dürftig... verwende lieber ein verfahren mit einer höheren ordnung wie ein semi-implizites burlisch stoer verfahren. (ist in der numerical recipes bibliothek gut beschrieben)

meinte mit kondition NICHT die abhängigkeit von den anfangswerten... sondern die inhärente instabilität (auch unter "kondition" bei ode's bekannt) diese ist auch NICHT in den griff zu bekommen. du kannst hierfür nur die ordnung deines verfahrens erhöhen.

du hast nun also folgende möglichkeiten:
1) verwende mal ein rkv mit höherer ordnung (da du schon eins implementiert hast macht es wenig aufwand eines mit höherer ordnung zu verwenden 8 halte ich noch für sinnvoll)

2) verwende das semi-implizites burlisch stoer (NOTFALLS auch das implizites euler)


eine divergenz durch "falsche" anfangswerte halte ich für ausgeschlossen, da es ja bein "hinwärts-integrieren" klappt.

wie gesagt versuche mal ordnung zu erhöhen und poste dein ergebnis
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »