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

Modellierung mit Newtonschem Gesetz:

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}$

Modellierung mit Hamiltonschem Prinzip:

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}$

Berechnung

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()