Numerik bricht zusammen
-
Hallo allerseits. Ich habe folgendes Problem: Ich will ein (relativ kompliziertes) nichtlineares Randwertproblem lösen. Ein lauffähiges C-Programm habe ich bereits geschrieben. Ich weiß, dass es läuft, weil ich es an einem einfachen RWP getestet habe. Wenn ich es nun auf mein eigentliches Problem anwende, dann sinkt die Lösung nach ein paar Itterationen ins unermessliche und binnen eines Steps wird aus einem bisher monotonen Verlauf ein NaN. Ich kann allerdings keine Singularität im System erkennen. Es wäre schwer, hier das mathematische Problem im Detail zu erläutern.
Gibt es vielleicht oft auftretende numerische Fehler, welche solch ein Problem verursachen? Kann jemand ad hoc eine Vermutung abgeben, ob hier was problemunabhängiges dahinter steckt?
-
Es wäre hilfreich, wenn du zumindest sagen würdest, welches Verfahren du zur Lösung verwendest. Alles andere ist stochern im Nebel.
-
Wie soll man ohne jede Information antworten können?
Ja: Es gibt numerische Fehler die so etwas verursachen könnten.
Und es gibt jede Menge Möglichkeiten, wie du falsch programmiert haben könntest und es gar nicht an deinem Problem liegt.Bist du nun schlauer als vorher?
-
Ich verwende ein shooting-Verfahren. Ich schieße von x>0 gegen x=0 und minimiere dort die Differenz zwischen Auftreffpunkt und Randbedingung mit Newton-Raphson. Zum Schießen benutze ich Runge-Kutta fünfter Ordnung. Dazu sollte ich wohl noch sagen, dass das alles komplexe Variablen und Funktionen sind. Ich habe alle Routinen nach Numerical Recipes implementiert, auch die komplexe Arithmetik. Doch während der Itterierung von Runge-Kutta tritt oben beschriebenes Phänomen auf.
-
Na, wenn's im Runge-Kutta schiefläuft, würd ich in der Schrittweitenkontrolle zu suchen anfangen.
-
Ja, die Schrittweitenkontrolle bricht das ganze letzendlich ab weil die Steps zu klein werden. Das ist aber normal. Die Steps müssen klein werden, weil die Ableitung extrem groß wird. Die Schrittweitenkontrolle funktioniert also. Ich habe sie, zwecks Fehleranalyse, erstmal raus genommen und stieß auf obiges Problem.
Ist wirklich schwer ohne Code und Formeln. Aber das ganze ist so länglich, dass ich es hier erstmal allgemein versuche zu erklären.
-
Keine Ahnung, schon mal ueber Stabilitaet nachgedacht? Tritt das Verhalten auch auf, wenn du Routinen in Matlab oder Mathematica benutzt?
-
Ok, große Ableitung also vermutlich ein steifes Problem? Probier doch mal ein implizites RK-Verfahren, da sollten die meisten Stabilitätsprobleme wegfallen.
-
Ah ja, das kann sein, dass ich das als "stiff set" behandeln muss. In die Richtung könnte ich es probieren. Danke für den Hinweis, Daniel.