Die vielleicht wichtigste Gleichung in der Physik ist das Hook'sche Gesetz:
\begin{equation} \overrightarrow{F} = -k \cdot \overrightarrow{x} \end{equation}
Ut tensio, sic vis (1678)
Das Hook'sche Gesetz wird in der Physik behandelt. Wir wollen es hier nur so weit in Erinnerung rufen (bzw. in eine Form bringen), wie es für die Numerik nützlich ist.
Für das Hook'sche Gesetz gilt:
a) | b) | a) Der originale Versuchsaufbau von Robert Hook (1635-1704). b) Federpendel Eine Animation der Gleichung F = - k x von Oleg Alexandrow |
Die Kraft, die nötig ist, um die Feder zu dehnen, wird umso größer je weiter die Feder gedehnt werden soll. Wir gehen davon aus, dass wir die Feder nur so weit dehnen wollen, dass sie, ohne beschädigt zu werden, wieder in den Ausgangszustand gelangt, ansonsten gilt das Hook'sche Gesetz natürlich nicht.
Diesen Sachverhalt schreiben wir mathematisch so:
Entsprechend gilt für die Rücktreibende Kraft:
Wir schreiben diese Gleichung jetzt in eine Form, wie sie für die Numerik benötigt wird. Dazu muss man allerdings das 2.Newtonsche Axion ($\overrightarrow{F}=m \cdot \overrightarrow{a}$) kennen, außerdem sollte man wissen, wie die Geschwindigkeit und Beschleunigung definiert ist.
Die Ableitung nach der Zeit kennzeichnen wir mit einem Punkt über der Variablen. Damit schreiben wir für die Geschwindigkeit: \begin{equation}v = \frac{dx}{dt} = \dot x \end{equation} Für die Beschleunigung erhalten wir jetzt: \begin{equation}a = \frac{dv}{dt} = \frac{d \dot x}{dt} = \ddot x \end{equation} Damit lautet nun das Hook'sche Gesetz: \begin{equation} F= m\cdot a = m \ddot x = - k\cdot x \rightarrow \ddot x = - \frac{k}{m} \cdot x \end{equation}
Aus der ursprünglichen einen Gleichung sind jetzt zwei geworden, dafür liegen sie jetzt in einer Form vor, wie es für die Numerik benötigt wird.
Das Hook'sche Gesetz (anders geschrieben)
\begin{equation}a = \frac{dv}{dt} = - \frac{k}{m} \cdot x \end{equation}
\begin{equation}a = \frac{dx}{dt} = v \end{equation}
Phasendiagramm - ein Diagramm mit der Geschwindigkeit (Impuls) als Ordinate und dem Ort als Abszisse. Phasenpunkt - ein Punkt in der x-v-Ebene zu einem bestimmten Zeitpunkt Trajektorie - eine Kurve, die sich ergibt, wenn der Phasenpunkt sich in der Zeit bewegt. |
Wenn sich ein Teilchen entlang der x-Achse bewegt, wird dessen Bewegung häufig als ein Graph der Koordinate (wir nennen sie hier x) oder aber der Geschwindigkeit (v=dx/dt) als Funktion der Zeit dargestellt. Eine andere aber überaus nützliche Darstellungsweise erhält man, wenn man die Geschwindigkeit v des Teilchens in Abhängigkeit von der Position x zu jedem Zeitpunkt t graphisch darstellt. Für einen bestimmten Zeitpunkt t erhält man so einen Punkt (x(t),v(t)), den man als Phasenpunkt bezeichnet. Dieser Punkt wird sich im Laufe der Zeit weiter bewegen. Die Kurve die sich dabei ergibt, bezeichnet man als Trajektorie und die Fläche (b.z.w. Raum), in der sich das Teilchen bewegt als Phasenfläche (Phasenraum). Das Diagramm als ganzes nennt sich dann Phasendiagramm. Solche Diagramme spielen eine wichtige Rolle in allen Forschungsrichtungen der nichtlinearen Dynamik (z.B. Chaosphysik). |
Wie sieht das Phasendiagramm für den harmonischen Oszillator (Federpendel) aus?
Für jede periodische Bewegung gilt, dass das Phasendiagramm geschlossene Trajektorien besitzt.
Diskretisieren die unendlich kleine
Größe, z.B. dt wird durch eine kleine
aber endliche Größe (hier Δt) ersetzt. 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)). | Wir demonstrieren das Euler-Verfahren am Beispiel des Federpendels (Hook'sche Gesetz). $$ \frac{dv}{dt} = - \frac{k}{m} x$$ $$\frac{dx}{dt} = v$$Das Differential dt stellt eine unendlich kleine Größe dar. So etwas können wir mithilfe des Computers nicht simulieren. Deshalb ist es notwendig, solche unendlich kleinen Größen durch zwar kleine aber endliche Größen zu ersetzen. Für dt schreiben wir dann Δt und aus dx wird: dx ≈ x(t+Δt)-x(t),
sowie für dv ≈ v(t+Δt)-v(t), d.h. wir bilden jeweils Differenzen. Hiermit ergibt sich dann für das Hook'sche
Gesetz (bitte unbedingt nachrechnen): $$\frac{dv}{dt} = - \frac{k}{m}x \rightarrow dv = -\frac{k}{m} x dt \rightarrow v(t+\Delta t) = v(t) - \frac{k}{m}x \Delta t $$ und $$ \frac{dx}{dt}=v \rightarrow dx = vdt \rightarrow x(t+ \Delta t) = x(t) + v(t)\Delta t$$ Wir sind hier nur daran interessiert, das Verfahren kennenzulernen, deshalb setzen wir im Weiteren k=m=1 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() kann nach jeder Iteration der neu berechnete Ort (Geschwindigkeit) ausgegeben werden.
public class Euler { private double x; private double v; private double t; public Euler() { } public void init(double x0, double v0, double timeStep){ t = timeStep; x = x0 + v0 * t; v = v0 - x0 * t; } public void nextEuler(){ double x_old = x; x = x + v * t; v = v - x_old * t; } public double getX(){ return x; } public double getV(){ return v; } }
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 „alten“ Geschwindigkeitswert weiter rechnet.
$$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.
Die hier vorgestellten einfachen Verfahren zur numerischen Lösung von Differentialgleichungen, werden in der Praxis i.a. durch raffiniertere numerische Verfahren ersetzt (z.B. Runge-Kutta Methoden).
public class EulerCromer{ private double x; private double v; private double t; public EulerCromer() {} 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() { return v; } }