einfuehrung_in_die_numerik
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
einfuehrung_in_die_numerik [2024/01/13 13:40] – [Was ist ein Phasendiagramm?] torsten.roehl | einfuehrung_in_die_numerik [2024/01/13 15:13] (aktuell) – torsten.roehl | ||
---|---|---|---|
Zeile 71: | Zeile 71: | ||
\\ \\ \\ Die kinetische Energie des \\ Federpendels ist:\\ | \\ \\ \\ Die kinetische Energie des \\ Federpendels ist:\\ | ||
$E_{kin} = \frac{1}{2}m \cdot v^2$ | $E_{kin} = \frac{1}{2}m \cdot v^2$ | ||
- | </ | + | </ |
$$ \frac{1}{2} m v^2 + \frac{1}{2} k x^2 = E = const. | $$ \frac{1}{2} m v^2 + \frac{1}{2} k x^2 = E = const. | ||
</ | </ | ||
Zeile 81: | Zeile 81: | ||
====Das Euler-Verfahren zur numerischen Lösung von Differentialgleichungen ==== | ====Das Euler-Verfahren zur numerischen Lösung von Differentialgleichungen ==== | ||
+ | |||
+ | |<wrap lo> | ||
+ | Größe, z.B. dt wird durch eine kleine | ||
+ | aber endliche Größe (hier Δt) ersetzt.\\ \\ <color #00a2e8> **Anfangsbedinungen**: | ||
+ | Jede numerische | ||
+ | Lösung setzt voraus, | ||
+ | dass man die Anfangsbedingungen kennt. Im vorliegenden Fall bedeutet das, dass der Ort und die Geschwindigkeit am Anfang bekannt sein muss (x(0), v(0)).</ | ||
+ | </ | ||
+ | sowie für dv ≈ v(t+Δt)-v(t), | ||
+ | Gesetz \\ //(bitte unbedingt nachrechnen)//: | ||
+ | Hieraus resultieren dann die von uns verwendeten Gleichungen zur numerischen Lösung: $$x(t+\Delta t) = x(t) + v(t) \Delta t$$ $$v(t+\Delta t)=v(t) -x(t) \Delta t$$ Mithilfe der ersten Gleichung kann man die Position (Ort) des Teilchen im nächsten Zeitschritt Δt bestimmen. Und mithilfe der zweiten Gleichung ist es möglich, die Geschwindigkeit im nächsten Zeitschritt zu bestimmen. Grundsätzlich | ||
+ | können wir also, wenn wir den Ort und die Geschwindigkeit kennen auch Ort und Geschwindigkeit im nächsten Schritt bestimmen. Trotzdem können wir diese Gleichung momentan noch nicht benutzen, denn erst wenn wir den Ort x(0) und die Geschwindigkeit v(0) am Anfang kennen, können wir diese Gleichung verwenden, um für jeden beliebigen Zeitpunkt Ort und Geschwindigkeit iterativ zu bestimmen. </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Die Methode **init (Zeile 9)** muss zuerst aufgerufen werden, um die Anfangswerte für den Ort, Geschwindigkeit sowie die Schrittweite zu setzen. | ||
+ | |||
+ | Mit der Methode **nextEuler() (Zeile 15)** wird jeweils eine Iteration durchgeführt. | ||
+ | |||
+ | Mit **getX()** und **getV()** | ||
+ | werden. | ||
+ | |||
+ | <Code Java linenums: | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | t = timeStep; | ||
+ | x = x0 + v0 * t; | ||
+ | v = v0 - x0 * t; | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | x = x + v * t; | ||
+ | v = v - x_old * t; | ||
+ | } | ||
+ | | ||
+ | public double getX(){ | ||
+ | | ||
+ | } | ||
+ | public double getV(){ | ||
+ | return v; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
====Das Euler-Cromer-Verfahren zur numerischen Lösung von Differentialgleichungen ==== | ====Das Euler-Cromer-Verfahren zur numerischen Lösung von Differentialgleichungen ==== | ||
+ | Die Gleichungen für das Euler-Cromer- Verfahren sind fast identisch mt denen des Euler-Verfahrens. | ||
+ | Lediglich bei der Berechnung des Ortes wird die gerade erst berechnete Geschwindigkeit eingesetzt, wohingegen das Euler-Verfahren dort mit dem " | ||
+ | |||
+ | $$v(t+\Delta t) = v(t) - x(t) \Delta t)$$ | ||
+ | |||
+ | $$x(t+\Delta t) = x(t) + v(t+\Delta t) \Delta t$$ | ||
+ | |||
+ | Dennoch im Ergebnis unterscheiden sich die Verfahren stark. Will man z.B. Planetenbahnen berechnen, ist das Euler-Verfahren im allgemeinen unbrauchbar. | ||
+ | |||
+ | <WRAP center round info 100%> | ||
+ | Die hier vorgestellten einfachen Verfahren zur numerischen Lösung von Differentialgleichungen, | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | <Code Java linenums: | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | public void init(double x0, double v0, double timeStep){ | ||
+ | t = timeStep; | ||
+ | v = v0 - x0 * t; | ||
+ | x = x0 + v * t; | ||
+ | | ||
+ | public void nextEulerCromer(){ | ||
+ | v = v + x * t; | ||
+ | x = x - v * t; | ||
+ | } | ||
+ | public double getX(){ | ||
+ | return x; | ||
+ | } | ||
+ | public double getV() { | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | ====Vergleich der beiden Verfahren ==== | ||
+ | {{ : | ||
+ | |||
+ | Numerische Lösung für das Federpendel. Das Eulerverfahren ist hier nicht geeignet |
einfuehrung_in_die_numerik.1705153238.txt.gz · Zuletzt geändert: 2024/01/13 13:40 von torsten.roehl