tinowagner.com // Blog

Dies und das.
  • Blog
  • Projekte
  • Impressum

Untermenü

  • Archiv
  • Kategorien

    • Allgemein
    • Bilder
    • Fundstücke
    • OS & Apps
      • Gimp
      • Linux
      • Mac
    • Physik
    • Programmieren
      • Web-Dev
    • Sprache
  • Neueste Beiträge

    • 750 frames of chaos
    • Magnetic pendulum, the OpenCL way.
    • Asus DH Remote: Crafting an OS X driver
    • Das Magnetpendel
    • Powerbook und Lower Memory Slot
  • Neueste Kommentare

    • Tino Wagner bei Möge es doppel-pendeln!
    • Anna bei Möge es doppel-pendeln!
    • Grandeau bei Das Magnetpendel
    • Tino Wagner bei Das Magnetpendel
    • Grandeau bei Das Magnetpendel
  • Blogroll

    • Nicole Schönfelder
  • Meta

    • Anmelden
    • Beitrags-Feed (RSS)
    • Kommentare als RSS
    • WordPress.org
« Lebendiger Apfelsaft
Powerbook und Lower Memory Slot »

Möge es doppel-pendeln! 2008-04-02

Die Semesterferien neigen sich dem Ende zu, und nach all der Prüfungszeit wollte ich mal wieder was programmieren. Doch was? Nun, ich glaube ein Physikstudent sollte zumindest einmal in seinem Leben eine _Simulation eines Doppelpendels_ programmieren 😉 Es ist nicht nur schön anzusehen, sondern auch als wohl einfachstes „chaotisches System“:http://de.wikipedia.org/wiki/Chaos ein physikalisch interessanter Fall.

Die Herleitung der Bewegungsgleichungen ist dank zwei Semestern theoretischer Physik und „Lagrange II“:http://de.wikipedia.org/wiki/Lagrange-Formalismus nicht schwer, wird aber auch bei „Eric Weisstein’s World Of Physics“:http://scienceworld.wolfram.com/physics/DoublePendulum.html sehr schön beschrieben. 

Die dort hergeleiteten Gleichungen sind

M l_1 \ddot \phi_1 + m_2 l_2 \ddot \phi_2 \cos (\phi_1 - \phi_2) + m_2 l_2 \dot \phi^2_2 \sin (\phi_1 - \phi_2) + M g \sin \phi_1 = 0

m_2 l_2 \ddot \phi_2 + m_2 l_1 \ddot \phi_1 \cos (\phi_1 - \phi_2) - m_2 l_1 \dot \phi^2_1 \sin (\phi_1 - \phi_2) + m_2 g \sin \phi_2 = 0

mit M = m_1 + m_2  als Gesamtmasse.

Bleibt noch das Problem sie zu lösen. Analytisch ist das aber ohne Näherung nicht möglich. (Schon das einfache Fadenpendel läßt sich analytisch nur für kleine Winkel exakt lösen!)

Also numerisch.

Angefangen mit „Python“:http://www.python.org/ und dem Rechenpaket „SciPy“:http://scipy.org/ habe ich also ein Einfach- und ein Doppelpendel nebeneinander aufgehängt. (Für die Grafkausgabe OpenGL und „Pyglet“:http://www,pyglet.org/)

Das gekoppelte Differentialgleichungssystem 2. Ordnung muß man hierbei zur numerischen Lösung in ein Differentialgleichungssystem 1. Ordnung umformen, damit die Integrationsroutinen aus SciPy anwendbar sind. Aber das ist zum Glück immer möglich.

Weil es aber langweilig ist, eine fertige Funktion zu nutzen, habe ich auch diese Routinen noch umgesetzt. Genauer gesagt drei verschiedene: das „Euler-Verfahren“:http://de.wikipedia.org/wiki/Explizites_Euler-Verfahren, das „klassische Runge-Kutta-Verfahren“:http://de.wikipedia.org/wiki/Klassisches_Runge-Kutta-Verfahren mit fester Schrittweite und das Runge-Kutta-Verfahren nach „Dormand und Prince“:http://en.wikipedia.org/wiki/Dormand-Prince mit einer sich anpassenden Schrittweite, wie es in „Numerical Recipes“:http://www.nrbook.com/ beschrieben ist.

Doppelpendel

Lange Rede, kurzer Sinn. Den Python-Code gibt’s hier: „klick“:http://www.tinowagner.com/projekte/double_pendulum-r25.zip. Ausführen mit „python -O simulation.py“.

Zur Ausführung wird, wie gesagt, weiterhin das Modul „Pyglet“:http://pyglet.org/download.html benötigt. In _ode.py_ findet sich die Implementation der ODE-Integrationsroutinen. Um die Pendelparameter zu ändern, liefere ich eine einfaches und schnell zusammengeschustertes Widget-Toolkit mit, das das Unterfenster erzeugt.

Da ich aber auch mal wieder was mit Java machen wollte, habe ich das Doppelpendel noch mit Java, „NetBeans“:http://www.netbeans.org/ und „JOGL“:https://jogl.dev.java.net/ (OpenGL-Binding für Java) umgesetzt. „umgesetzt“ heißt hierbei, daß ich den Code nahezu 1:1 von meinem ursprünglichen Python-Code übersetzt habe. Die Java-Simulation läuft etwas schneller und dank Java Web Start kann ich hier auch einen Link bieten, um sich das ganze sofort anzuschauen.

Den Quelltext gibt’s natürlich auch.

Tags: Java, ODE, Pendel, Physik, Python

Der Beitrag wurde am Mittwoch, den 2. April 2008 um 23:24 Uhr veröffentlicht und wurde unter Physik, Programmieren abgelegt. Du kannst die Kommentare zu diesen Eintrag durch den RSS 2.0 Feed verfolgen. Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.

7 Reaktionen zu “Möge es doppel-pendeln!”

  1. Antoniaa Cute
    Am 6. Mai 2008 um 23:05 Uhr

    Tolle Idee.
    Wenn der Pendel in Flash zu haben ist, kann ich auch mal damit mitspielen.

  2. Basti
    Am 24. Juli 2008 um 17:06 Uhr

    Hi, erstmal muss ich sagen ein tolles Programm.
    ich bin auch gerade dabei so etwas zu programmieren und wollte dich Fragen
    wie und mit welchem Programm du die Differentialgleichungen 2. Ordnung entkoppelt und in ein DGL-System erster Ordnung überführt hast.

    mfg
    Basti

  3. tuxu
    Am 24. Juli 2008 um 17:35 Uhr

    Hallo Basti,

    die gängigen numerischen Integationsroutinen schlucken keine DGL-Systeme 2. Ordnung, sondern nur welche 1. Ordnung. Der Schritt, das System von zweiter in erste Ordnung umzuwandeln ist recht trivial. Am Beispiel des einfachen Fadenpendels: phi“ = -g/l * sin(phi). Man nennt nun phi‘ = phidot (Gleichung 1). Dann ist phidot‘ (= phi“) = -g/l * sin(phi). Zwei gekoppelte DGLs ersten Grades, mit denen man den Algorithmus füttern kann.

    Entkoppeln braucht man die Gleichungen dafür nicht. Ich bin mir auch nicht sicher, ob das überhaupt ohne Näherung möglich ist …

    Viele Grüße,
    Tino

  4. Wolfgang
    Am 20. November 2009 um 18:32 Uhr

    Hallo,

    wäre es möglich, den numerischen Lösungalgorithmus zu bekommen, damit ich den in VB bzw. VBA übertragen kann.

    Gruß

  5. Tino Wagner
    Am 20. November 2009 um 19:36 Uhr

    Hallo Wolfgang,

    die Python- und Java-Quelltexte sind schon verlinkt. Wie die Lösungsalgorithmen funktionieren steht auch in den verlinkten Wikipedia-Artikeln.

    Viele Grüße,
    Tino

  6. Anna
    Am 22. August 2016 um 11:04 Uhr

    Hallo,
    für meine W-Seminararbeit in der Schule muss ich eine Simulation von einen Doppelpendel Programmieren jedoch komme ich leider bei der Formel nicht weiter. Ich hänge zurzeit bei der Formel für die kinetische Energie. Bei dieser Formel werden Punkte über die Formelzeichen gesetzt. Was bedeuten diese? und wie kann ich mit ihnen rechnen? Wär nett wenn du mir weiterhelfen kannst.
    Viele Grüße
    Anna

  7. Tino Wagner
    Am 22. August 2016 um 21:14 Uhr

    Hallo Anna,

    die Gleichungen oben sind bereits die gekoppelten Bewegungsgleichungen für das Doppelpendel. Die Punkte über den Formelzeichen stehen für die 1. und 2. Ableitung nach der Zeit. Schau z.B. mal bei [1] oder in der Wikipedia [2], dort gibt es eine ausführliche Herleitung.

    Viele Grüße,
    Tino

    [1]: http://scienceworld.wolfram.com/physics/DoublePendulum.html
    [2]: https://en.wikipedia.org/wiki/Double_pendulum

Einen Kommentar schreiben


tinowagner.com // Blog is proudly powered by WordPress | WPD
Beiträge (RSS) und Kommentare (RSS)