Runge-Kutta-Verfahren 4.Ordnung für gekoppelte Differentialgleichungen wird instabil

Neue Frage »

seems Auf diesen Beitrag antworten »
Runge-Kutta-Verfahren 4.Ordnung für gekoppelte Differentialgleichungen wird instabil
Meine Frage:
Hallo liebe Matheprofis,
ich habe folgendes Problem und hoffe, dass ich hier nicht irgendwie falsch poste oder sowas (bin neu):

Es soll ein Programm zur Simulation eines gekoppelten Feder-Masse-Pendels geschrieben werden, das die Lösung mittels Runge-Kutta-Verfahren 4.Ordnung berechnet. Eine Zeichnung des Modells ist im Anhang. Leider bin ich mir nicht sicher ob das Verfahren richtig angewendet wurde. Bei hinreichend langer Zeit fängt die Lösungskurve an instabil zu werden, also viel zu große Werte anzunehmen.

x = Ort, dx/dt=v=Geschwindigkeit, d²x/dt²=a=Beschleunigung, m=Masse, C=Federkonstante

Für die Bewegungsgleichungen habe ich:
I)
II) ermittelt.

Das dieses System auf ein Eigenwertproblem führt, das man analytisch lösen kann, ist mir bewusst. Es soll zur Übung das Runge-Kutta-Verfahren angewendet werden.



Meine Ideen:
Anschließend habe ich das System um das Verfahren anwenden zu können umgeformt.

\Delta t = Zeitschritt (Diskretisierung der Funktion), F= Steigung nach Runge Kutta, i = Schrittanzahl

Für Masse 1:







Für Masse 2:







Erläuterung der Integrationsvorschrift:

Ich nehme den Wert der Funktion an der Stelle i und addiere die Steigung*Zeitschritt um den Funktionswert an der i+1 Stelle zu approximieren.
F ist dabei nach der Methode von Runge Kutta zu ermitteln.

Bestimmung von F:
a, b, c, d sind die Steigungen der Funktion







Im Anhang ist ebenfalls ein Screenshot mit einem Flussdiagramm vom Algorithmus. Meine Frage wäre jetzt ist der Algorithmus richtig und es hat einen anderen Grund, das es instabil wird (zu große Schrittweite etc.) oder liegt es am Algorithmus? Btw. der Algorithmus bildet die genaue Lösung, die ich zum Vergleich für einen bestimmten Fall berechnet habe, anfänglich mit hinreichender Genauigkeit ab, sodass es einige Zeit dauert bis es instabil wird.
HAL 9000 Auf diesen Beitrag antworten »

Zitat:
Original von seems
Bei hinreichend langer Zeit fängt die Lösungskurve an instabil zu werden, also viel zu große Werte anzunehmen.

Diesen numerisch bedingten Effekt kenne ich von eigenen früheren Simulationen (wenn auch nicht gekoppeltes Federsystem, aber was ähnliches):

Während für die exakte DGL-Lösung der Energieerhaltungssatz gilt - bei dir sowas wie



o.ä. - so gilt das für die berechneten Werte gemäß Mehrschrittverfahren (wie Runge-Kutta) nicht mehr:

Schleichend verändert sich die Gesamtenergie , zumindest wenn man die Schrittzahl übertrieben groß im Vergleich zu wählt - bei dir scheint sie zu wachsen. Augenzwinkern


Ausweg: Nicht übertrieben lange simulieren - oder falls das ganze (aus "Showgründen" Augenzwinkern ) quasi endlos lange laufen soll, dann musst du zwischendurch die Gesamtenergie "korrigieren" - z.B., indem du gleichmäßig "stutzt" durch Anwendung von (*).
 
 
seems Auf diesen Beitrag antworten »

Danke für die schnelle Antwort Augenzwinkern

Also ist der Algorithmus prinzipiell richtig? Die Korrektur find ich gut. Damit werd ichs versuchen. Ist ohne Dämpfung auch wirklich ne Gratwanderung bei Schwingungen. Ich meine gelesen zu haben das Runge-Kutta ein Einschrittverfahren ist, weil nur Werte zwischen und für die Berechnung des Folgewertes benutzt werden :P
HAL 9000 Auf diesen Beitrag antworten »

Zitat:
Original von seems
Ich meine gelesen zu haben das Runge-Kutta ein Einschrittverfahren ist

Ah ja, mag sein, ist zu lange her - ich merk mir mehr strukturelle Inhalte als Begriffe, eine Schwäche von mir. Augenzwinkern
seems Auf diesen Beitrag antworten »

Lieber so als andersrum ^^

Stimmt der Algorithmus denn wenigstens oder bin ich auf dem Holzweg? Der sollte nach Möglichkeit richtig sein. Hab im Grunde genau das gleiche gemacht wie bei Euler-Cauchy aber die Steigung anders bestimmt. Bin mir irgendwie unsicher.
HAL 9000 Auf diesen Beitrag antworten »

Hab ich mir jetzt nicht im Detail angeschaut, es gibt ja Runge-Kutta in diversen Untervarianten mit unterschiedlicher Stufenzahl (ich hatte oben mehrstufig mit mehrschrittig verwechselt Augenzwinkern ), da enden meine sofort paraten Kenntnisse und ich müsste erstmal recherchieren - ist wie gesagt lange her.
seems Auf diesen Beitrag antworten »

Aso trotzdem danke
HAL 9000 Auf diesen Beitrag antworten »

Irgendwie sieht dein Rechenablauf aber merkwürdig aus, strukturell viel zu einfach, so gar nicht nach Runge-Kutta. verwirrt
seems Auf diesen Beitrag antworten »

http://de.wikipedia.org/wiki/Klassisches...Kutta-Verfahren -- zur Orientierung

,wobei ich mir auch nicht sicher war, was ich mit dem aus (Wikipedia Artikel) anfangen sollte, da meine Funktionen ja in diesem Fall nur von y und den Zeitableitungen abhängt. in meinem Fall wäre das ja auf den Artikel übertragen


mit der Schrittweite

usw.
HAL 9000 Auf diesen Beitrag antworten »

Wir haben ja de facto eine die DGL beschreibende Funktion mit

,

oder kurz mit dem gebündelten Vektor vorliegen.


Die Runge-Kutta-Variante, die dir vorschwebt, funktioniert ja irgendwie so: Ausgangspunkt sind die Daten zum "alten" Zeitpunkt . Nun wird nacheinander berechnet









alles hübsch vektoriell (Dimension 4) mit insgesamt vier Aufrufen der Funktion mit jeweils unterschiedlichen Argumenten - ist bei dir oben irgendwie überhaupt nicht erkennbar - oder versteh ich deine "schematische" Darstellung bloß nicht? unglücklich


Schließlich haben wir dann



als nächsten Approximationswert.
seems Auf diesen Beitrag antworten »

Ja ganz genau!

Hab ich nicht genau die gleiche Rechnung Komponentenweise durchgeführt? Genau so wie dargestellt war ja der Gedanke.
Meine Darstellung lässt in der Tat zu wünschen übrig. So ist es um einiges übersichtlicher^^
HAL 9000 Auf diesen Beitrag antworten »

bzw. bauen auf ihrem jeweiligen Vorgänger bzw. unmittelbar auf via F-Aufruf - diese strukturelle "Stufigkeit", die ja Runge-Kutta ausmacht, kann ich in deinem Rechenschema überhaupt nicht erkennen. Da sieht es so aus, als würdest du pro Schritt nur einmal statt viermal aufrufen. verwirrt
seems Auf diesen Beitrag antworten »

Im ersten Beitrag habe ich a,b,c,d benutzt. ich gehe jetzt auch mal zu k1,k2,k3,k4 über
mit a ist beschleunigung gemeint, v ist geschwindigkeit



dafür hatte ich geschrieben für die Beschleunigungen und für die Geschwindigkeiten (also im Grunde erst Komponente 1 und 3 von und dann Komponente 2 und 4 auswerten)



dafür hatte ich geschrieben für die Beschleunigungen und für die Geschwindigkeiten

usw.
seems Auf diesen Beitrag antworten »

Zum Algorithmus:

1) Als erstes Werte ich die Zustandsgleichungen und aus.

2.1)
Dann wird für das F berechnet.



=> Änderung für die Geschwindigkeit gemäß

2.2)
Wie 2.1) nur mit
=> Änderung für die Geschwindigkeit

2.3)
Wie 2.1) nur mit



=> Änderung für den Ort

2.4)
Wie 2.1 nur mit
=> Änderung für den Ort

3) Integrationsvorschrift (Für F ist dann das vorher berechnete entsprechend einzusetzen)

Nächster Wert = Vorheriger Wert + * Änderung

--------------------------------------

1) Wieder Zustandsgleichungen auswerten usw...


Ich verstehe im Moment noch nicht so ganz ob da n Unterschied besteht oder nicht.
HAL 9000 Auf diesen Beitrag antworten »

Sieht so aus, als drehen wir uns im Kreis (und das nun schon zwei Runden):

Ich sage, du setzt RungeKutta nicht richtig um, und du glaubst es nicht (wie ich an der Beharrung auf deine falsche Berechnungsreihenfolge sehe).

Damit gebe ich es auf - vielleicht programmierst du einfach sorgfältig beide Varianten, dann siehst du die Unterschiede. Sehr wahrscheinlich ist das auch der Grund, warum du dich so schnell in der Energie vom wahren Wert entfernst:

Während Runge-Kutta in dieser Ausführung RK4 ja einen Fehler der Größenordnung hat, kommt man mit deiner Methode wohl nur auf , da kannst du auch gleich nur das klassische Euler-Verfahren anwenden.
seems Auf diesen Beitrag antworten »

ich glaub das sofort. ich bin ja auch selbst der meinung irgendwas ist da nicht ganz richtig. ich versteh nur den unterschied zwischen den beiden vorgehensweisen nicht so ganz. unglücklich
wäre super nett, wenn du hinschreiben könntest was





ausgewertet ist. denke dann hab ichs smile
HAL 9000 Auf diesen Beitrag antworten »

Ja, was soll ich sagen - es sind nur die Vektoren ausführlich auszuwalzen:

Also mit startend sowie



ist dann ausführlich ausgeschrieben



Weiter geht es mit , das ist dann



Schließlich bedeutet dann



und abschließend




Letzten Endes haben wir dann als Nachfolgezustand




Puhhh, was für eine Formelexzess - musste das jetzt wirklich sein, dass ich das ausschreibe? Nur weil du beschlossen hattest, Hinweise wie

Zitat:
Original von HAL 9000
alles hübsch vektoriell (Dimension 4) mit insgesamt vier Aufrufen der Funktion mit jeweils unterschiedlichen Argumenten - ist bei dir oben irgendwie überhaupt nicht erkennbar

und

Zitat:
Original von HAL 9000
bzw. bauen auf ihrem jeweiligen Vorgänger bzw. unmittelbar auf via F-Aufruf - diese strukturelle "Stufigkeit", die ja Runge-Kutta ausmacht, kann ich in deinem Rechenschema überhaupt nicht erkennen.

zu ignorieren? unglücklich
seems Auf diesen Beitrag antworten »
RE: Runge-Kutta-Verfahren 4.Ordnung für gekoppelte Differentialgleichungen wird instabil
Erstmal Vielen Dank für die ganze Mühe! smile

Jetzt ist es klar geworden Hammer . Warst ne super Hilfe.
Neue Frage »
Antworten »



Verwandte Themen

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