Lösen von DGL in C++



  • Ich denke, man sollte nicht "Konstanten" sagen, wenn sie offensichtlich nicht konstant sind.

    Aber ansonsten: ja, eine große Klasse von DGLs kann man so numerisch approximieren.



  • wunderbar.

    Wenn ich mir das Eulerverfahren zur Lösung von DGL angucke, wird die Lösung ja durch einen Polygonzug approximiert mit der Berechnungsvorschrift

    ...
    h = 1/N;
    ...
    T[k+1] = T[k] + h;
    Y[k+1] = Y[k] + h * [f(x)];
    ...

    Nun habe ich das Problem, dass ich zu Beginn meiner Simulation noch nicht weiß, wie lange diese läuft, da sie ein ereignisbezogenes Abbruchkriterium hat. Insofern kann ich N, welches mein T in gleich große Intervalle partitioniert, nicht wissen. Also ist es wohl "best practice", dass ich ein hohes N wähle und hoffe, dass es ausreicht.
    Oder ist es auch möglich, sozusagen das N in jedem Schritt einfach zu ändern, ohne die ergebnisse zu verfälschen?

    thx for ideas



  • Die Schrittweite h hat nichts mit der Anzahl deiner Schritte zu tun. Du kannst von Anfang an ein bliebiges h wählen (möglichst klein).
    Du kannst h auch während der Simulation ändern. Das hat aber nichts mit der Anzahl deiner Schritte zu tun (das ist sogar üblich - es gibt Lösungsverfahren, die automatisch die Schrittweite an die Funktion anpassen).

    Du musst nur daran denken: Mit jedem Schritt wird der Fehler größer!

    Das kannst du ausprobieren, indem du eine DGL analytisch löst und dann mit dem Eulerverfahren, z.b. y'(t) = y(t), y(0)=1
    Guck dir den Abstand zwischen der echten Kurve und der numerisch berechneten an. Je größer die Zeit, desto größer der Fehler.


Anmelden zum Antworten