Runge-Kutta-Verfahren 4.Ordnung für gekoppelte Differentialgleichungen wird instabil |
16.02.2015, 18:04 | seems | Auf diesen Beitrag antworten » | ||||
Runge-Kutta-Verfahren 4.Ordnung für gekoppelte Differentialgleichungen wird instabil 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. |
||||||
16.02.2015, 18:34 | HAL 9000 | Auf diesen Beitrag antworten » | ||||
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. Ausweg: Nicht übertrieben lange simulieren - oder falls das ganze (aus "Showgründen" ) quasi endlos lange laufen soll, dann musst du zwischendurch die Gesamtenergie "korrigieren" - z.B., indem du gleichmäßig "stutzt" durch Anwendung von (*). |
||||||
16.02.2015, 19:57 | seems | Auf diesen Beitrag antworten » | ||||
Danke für die schnelle Antwort 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 |
||||||
16.02.2015, 19:59 | HAL 9000 | Auf diesen Beitrag antworten » | ||||
Ah ja, mag sein, ist zu lange her - ich merk mir mehr strukturelle Inhalte als Begriffe, eine Schwäche von mir. |
||||||
16.02.2015, 20:05 | 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. |
||||||
16.02.2015, 20:21 | 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 ), da enden meine sofort paraten Kenntnisse und ich müsste erstmal recherchieren - ist wie gesagt lange her. |
||||||
Anzeige | ||||||
|
||||||
16.02.2015, 20:25 | seems | Auf diesen Beitrag antworten » | ||||
Aso trotzdem danke |
||||||
16.02.2015, 20:27 | HAL 9000 | Auf diesen Beitrag antworten » | ||||
Irgendwie sieht dein Rechenablauf aber merkwürdig aus, strukturell viel zu einfach, so gar nicht nach Runge-Kutta. |
||||||
16.02.2015, 20:50 | 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. |
||||||
16.02.2015, 20:51 | 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? Schließlich haben wir dann als nächsten Approximationswert. |
||||||
16.02.2015, 21:03 | 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^^ |
||||||
16.02.2015, 21:04 | 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. |
||||||
16.02.2015, 21:23 | 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. |
||||||
16.02.2015, 21:51 | 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. |
||||||
17.02.2015, 09:28 | 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. |
||||||
17.02.2015, 12:12 | 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. wäre super nett, wenn du hinschreiben könntest was ausgewertet ist. denke dann hab ichs |
||||||
17.02.2015, 12:39 | 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
und
zu ignorieren? |
||||||
17.02.2015, 12:44 | 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! Jetzt ist es klar geworden . Warst ne super Hilfe. |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|