Beispiel Projekt: Die Achterbahn

Das Projekt Achterbahn ist ein Anwendungsfall aus der klassischen Mechanik. Das System besteht aus zwei Achterbahn-Wagen unterschiedlicher Massen $m_i \, , \,\, i \in [0,1]$, die reibungsfrei auf einer Metallschiene gleiten können. Die Achterbahn hat eine Länge von $l \, [m]$ und besitzt keine Kurven, sodass man den Verlauf der Metallschiene der Achterbahn als eine eindimensionale Funktion $h(x) \, , \,\, x \in [-l/2, l/2]$ beschreiben kann, wobei $h(x)$ die Höhe der Metallschiene der Achterbahn an der Position $x$ in der Einheit Metern beschreibt. Der Einstiegspunkt in die Wagen befindet sich bei $x=0, \, y=0$ und die Achterbahn ist so konstruiert, dass sie die zwei Wagen zu unterschiedlichen Anfangszeitpunkten $\tau_i$ in die Achterbahnschiene katapultiert, wobei die Anfangsgeschwindigkeiten $\vec{v}_i(\tau_i)$ der Wagen (gemessen mit einem Sensor bei $x= 10 \, [cm]$) sich dabei unterscheiden. Jeder der Achterbahn-Wagen besitzt am vorderen und hinterem Bereich eine starke Metallfeder, die zum Einsatz kommt, wenn sich zwei der Wagen treffen. Es wird dabei angenommen, dass es sich bei einem Zusammenprall der Wagen um einen elastischen Stoß zweier Körper handelt.
Betrachten wir uns zunächst den Fall mit nur einem Wagen (Koordinaten: $\vec{r} = \left( x(t), \, y(t) \right) = \left( x(t), \, h(x(t)) \right)$, Masse $m$). Die Herleitung der Bewegungsgleichungen erfolgt am elegantesten mittels der Euler-Lagrange Gleichungen, bzw. mittels der Hamilton Theorie. Die Lagrangefunktion des Systems lautet: $$ \begin{eqnarray} & L = T - V \hbox{mit:} &\\ & T = \frac{1}{2} m \left[ \dot{x}(t)^2 + \dot{y}(t)^2 \right] \quad , \quad V(t) = m \, g \, y(t) \,\, , & \\ & \hbox{mit:} \quad \dot{y}(t) = \frac{d y}{dt} = \frac{d h (x(t))}{dt} = \frac{d x(t)}{dt} \cdot \frac{d h (x)}{dx} = \dot{x}(t) \cdot \frac{d h (x)}{dx}\quad , & \end{eqnarray} $$ wobei $g$ der Wert der Erdbeschleunigung ist. Nun kann man für eine beliebige Form des Verlaufs der Achterbahn (beschrieben durch die Funktion $h(x)$) die Bewegungsgleichung des Wagens mittels der Lagrange-Gleichungen $$ \begin{eqnarray} &\frac{d }{dt} \left( \frac{\partial L}{\partial \dot{x}} \right) - \frac{\partial L}{\partial x} \, =\, 0 \quad \hbox{mit:} & \\ &L = \frac{1}{2} m \left[ \dot{x}(t)^2 + \left( \frac{d h(x(t))}{dt} \right)^2 \right] - m \, g \, h(t) = \frac{1}{2} m \left[ \dot{x}^2 + \left( \dot{x} \cdot \frac{d h(x)}{dx} \right)^2 \right] - m \, g \, h(x) = \frac{1}{2} m \, \dot{x}^2 \cdot\left[ 1 + \left( \frac{d h(x)}{dx} \right)^2 \right] - m \, g \, h(x)& \end{eqnarray} $$ herleiten.

Mögliche Teilaufgaben des Projektes

Berechnen Sie zunächst auf analytischem Weg, mittels eines Jupyter Notebooks unter Verwendung der SymPy Bibliothek, die Euler-Lagrange Gleichungen der Bewegung eines Wagens auf der Achterbahn, wobei der Verlauf der Metallschiene der Achterbahn durch die Funktion $h(x) = e^{\frac{\sqrt{x^2}}{10}} \cdot \left( \hbox{sin}\left( \frac{x^2}{10} \right) \right)^2$ bestimmt ist. Schreiben Sie dann die Bewegungsgleichung in ein System von erster Ordnung Differentialgleichungen um.

Der Wagen ($m=100$ [Kg]) werde zur Zeit $t=0$ [s], mit einer Anfangsgeschwindigkeit von $\dot{x}(0) = 30.42$ [km/h] bei $x=0.01$ [m] in die Achterbahn katapultiert. Lösen Sie das System von Differentialgleichungen erster Ordnung zunächst mittels Python und visualisieren Sie die Simulation in einem Jupyter Notebook. Erhöhen Sie nun die Anfangsgeschwindigkeit auf $\dot{x}(0) = 60$ [km/h] und stellen beide numerischen Lösungen in einer Animation dar.

Lösen Sie nun das System von Differentialgleichungen erster Ordnung mittels eines C++ Programms und benutzen Sie das Runge-Kutta Ordnung vier Verfahren.

Vergleichen Sie beide Simulationen quantitativ.

Verallgemeinern Sie das C++ Programm so, dass mehrere Wagen auf der Achterbahn fahren können. Simulieren Sie ein System bestehend aus zwei wechselwirkungsfreien Wagen (siehe obige Animation) und benutzen Sie dabei für den ersten Wagen $i=0 \, , \, \tau_0 = 0 $ und $\dot{x}_0(0) = 16.45 \, [m/s]$ (blauer Wagen) und für den zweiten Wagen den ersten Wagen $i=1 \, , \, \tau_1=2 \, [s] $ und $\dot{x}_1(2) = 5.5 \, [m/s]$ (grüner Wagen).

Um die Richtigkeit der berechneten Daten des C++ Programmes zu verifizieren, führen Sie (nur in dieser Teilaufgabe) eine separate Simulation mit abgeänderter Achterbahnform durch, bei der es eine analytische Lösung gibt. Berechnen Sie zunächst auf analytischem Weg, mittels eines Jupyter Notebooks unter Verwendung der SymPy Bibliothek, die Euler-Lagrange Gleichungen der Bewegung eines Massenpunktes der Masse $m$ auf einer Zykloidenbahn (siehe Aufgabe 15.7: Walter Greiner, 'Klassische Mechanik II' [8. Auflage, 2008, Kapitel V15. Seite 271]). Der Massepunkt gleitet reibungsfrei auf einer Zykloide , die durch $$ \begin{equation} x(\theta) = a \left( \theta - \hbox{sin}(\theta) \right) \,\, , \,\, y(\theta) = a \left( 1 + \hbox{cos}(\theta) \right) \,\, , \quad 0 \leq \theta(t) \leq 2 \pi \end{equation} $$ gegeben ist. Vergleichen Sie Ihre Werte mit der analytischen Lösung in Aufgabe 15.7 (Walter Greiner, 'Klassische Mechanik II' [8. Auflage, 2008, Kapitel V15. Seite 271]). Vergleichen Sie auch die Resultate einer entsprechenden Simulation mittels Ihres C++ Programms.

Implementieren Sie nun einen elastischen Stoß der zwei Wagen in Ihr C++ Programm und führen Sie die obere Animation nochmals durch.

Vernachlässigen Sie jetzt nicht mehr die Luftreibung und bauen Sie einen zusätzlichen Reibungsterm in die Lagrangedichte ein. Lösen die dann die resultierenden Bewegungsgleichungen numerisch. Die Länge der Achterbahn sein $l=30 \, [m]$. Berechnen Sie, mit welcher maximalen Anfangsgeschwindigkeit der erste Wagen in die Bahn katapultiert werden kann.

Der Verlauf der Metallschiene der Achterbahn wird nun durch ein Lagrangepolynom $h(x)$ beschrieben, welches durch die Punkte $\vec{x}$ und $\vec{y}$ geht. Implementieren Sie in ihr C++ Programm die Fälle, dass vier bzw. fünf Punkte vorgegeben sind.

In einem der Wagen befindet sich jetzt ein physikalisches Pendel. Beschreiben Sie die Bewegung des Pendels innerhalb des Wagens.

Schreiben Sie Ihr Programm so um, dass das Projekt Achterbahn eine Klasse (mit eigenen Daten-Member, Member Funktionen und Konstruktoren) repräsentiert.

Die Musterlösung des Projektes Achterbahn finden Sie unter dem folgenden Link:
Musterlösung des Projektes Achterbahn