Harmonische Schwingung

Neue Frage »

SuperActionJesus Auf diesen Beitrag antworten »
Harmonische Schwingung
Servus!

Ich möchte ein Programm schreiben, das eine harmonische Schwingung
mithilfe der Differentialgleichung berechnet. Und das nach
Möglichkeit mit dem Runge-Kutta-Verfahren.

Ein bisschen rumprobiert habe ich schon, aber ohne Erfolg.

Ich hoffe, dass mir jemand sagen kann, wie die korrekte Vorgehensweise ist.
Und danke schonmal im Vorraus smile .
AD Auf diesen Beitrag antworten »

Runge-Kutta gibt's meines Wissens nach nur für Dgl erster Ordnung, da aber auch vektoriell. Also musst du deine Dgl zweiter Ordnung in eine erster Ordnung transformieren, naheliegenderweise so:



womit man dann



Und dann ganz normal Runge-Kutta auf diesen Vektor anwenden.
SuperActionJesus Auf diesen Beitrag antworten »

Den Transformationstrick konnte ich nachvollziehen, aber irgendetwas mache ich bei der Anwendung falsch.
Könntest du vielleicht ausführen, wie das konkret aussähe?
AD Auf diesen Beitrag antworten »

Ich nehme mal an, du meinst das klassische Runge-Kutta-Verfahren, wo man für die Dgl ausgehend von einem Schätzwert von auf einen Schätzwert von schließen möchte. Das geht so:



mit



Hier im konkreten Fall nun ist dieses sogar von der Zeit unabhängig, d.h., es gilt . Dadurch vereinfacht sich alles zu



Und jetzt einfach nur noch die Funktion



da einsetzen! Als Startwert brauchst du natürlich noch Ort und Geschwindigkeit zu einem festgelegten Zeitpunkt , und musst die Schrittweite noch passend wählen.
SuperActionJesus Auf diesen Beitrag antworten »

Klasse! Dankeschön smile

Ich probier das gleich morgen (heute) aus Augenzwinkern
SuperActionJesus Auf diesen Beitrag antworten »

Jaaaa!
Es geht! Einwandfrei!

Nochmals vielen Dank! smile

EDIT: Die Umsetzung:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
  omega := - D / m;
  z1 := s;             // Alter Ort
  z2 := v;             // Alte Geschwindigkeit

  Fa[0] := z2;
  Fa[1] := omega * z1;

  Fb[0] := z2 + (h / 2) * Fa[1];
  Fb[1] := omega * (z1 + (h / 2) * Fa[0]);

  Fc[0] := z2 + (h / 2) * Fb[1];
  Fc[1] := omega * (z1 + (h / 2) * Fa[0]);

  Fd[0] := z2 + h * Fc[1];
  Fd[1] := omega * (z1 + h * Fc[0]);

  s := s + (h / 6) * (Fa[0] + (2 * Fb[0]) + (2 * Fc[0]) + Fd[0]);    //Neuer Ort
  v := v + (h / 6) * (Fa[1] + (2 * Fb[1]) + (2 * Fc[1]) + Fd[1]);    //Neue Geschwindigkeit
 
 
Neue Frage »
Antworten »



Verwandte Themen

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