Links zu Dokumentationen/Tutorials für IPython/Python/numpy/matplotlib/git sowie die Sourcodes findet ihr im GitHub Repo.
In [1]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
Die tangentiale Kraft $F_{tan}(t) = m \; g \; sin(\alpha(t))$ wirkt entgegen der Rückstellkraft des Pendels: $F_{R}(t) = -F_{tan}(t) = m \; \ddot \alpha(t) \; l$.
Insgesamt ergibt sich als DGL 2. Ordnung: $- m \; g \; sin(\alpha(t)) = m \; \ddot \alpha(t) \; l$.
Umgeformt auf ein DGL-System 1. Ordnung:
$\begin{eqnarray} \dot \alpha(t) &=& x(t) \\ \dot x(t) &=& - \frac{g}{l} sin(\alpha(t)) \end{eqnarray}$
Gegeben ist die Energiefunktion: $H(p,q) = -m g l \; cos(q) + \frac{1}{2 m l^{2}} p^{2}$.
Mit den Hamiltonschen Bewegungsgleichungen ergibt sich:
$\begin{eqnarray} \dot q &=& \frac{\partial H}{\partial p} &=& p \frac{1}{m l^{2}} \\ \dot p &=& - \frac{\partial H}{\partial q} &=& - m g l \; sin(q) \end{eqnarray}$
Die Iteration ist mit C++ geschrieben aufgabe3.cpp. Die Werte sind in der Datei values gespeichert.
In [2]:
values = np.loadtxt('values')
alpha = values[:,0]
alpha_dot = values[:,1]
In [3]:
plt.plot(alpha)
plt.ylabel(r'$\alpha(t)$')
plt.xlabel(r'$t$')
plt.grid()
In [4]:
plt.plot(alpha[:100])
plt.ylabel(r'$\alpha(t)$')
plt.xlabel(r'$t$')
plt.grid()
In [5]:
q = alpha
p = alpha_dot
H = - np.cos(q) + p**2 / 2
$H(q(t), p(t))$ ist konstant, weil die Energieerhaltung gelten muss: $\frac{d}{dt} H(p(t),q(t)) = 0$
In [6]:
plt.plot(H)
plt.ylabel(r'$H(p(t),q(t))$')
plt.xlabel(r'$t$')
plt.axis([0,10000, -1, 0])
plt.grid()
In [7]:
plt.plot(q, p)
plt.ylabel(r'$p(t)$')
plt.xlabel(r'$q(t)$')
plt.grid()