Programming lesson
Pendelbewegung mit Euler-Verfahren: CMPSC431W Phase 2 Progress Review Leitfaden
Lerne, wie du die Pendelbewegung mit explizitem und semi-implizitem Euler-Verfahren in MATLAB/Octave simulierst. Inklusive Diskussion zur Energieerhaltung und Tipps für deine CMPSC431W Phase 2 Abgabe.
Einführung in das Pendelproblem und die numerische Lösung
In der Vorlesung CMPSC431W hast du gelernt, dass die Bewegung eines einfachen Pendels durch eine nichtlineare Differentialgleichung zweiter Ordnung beschrieben wird. Für die numerische Simulation zerlegt man diese in zwei gekoppelte Differentialgleichungen erster Ordnung:
- Winkelgeschwindigkeit: dω/dt = -(g/L) * sin(θ)
- Winkelposition: dθ/dt = ω
Deine Aufgabe in Phase 2 ist es, diese Gleichungen mit dem expliziten Euler-Verfahren zu diskretisieren und die Bewegung für L = 1 m, θ0 = π/3 und t = 0 bis 20 s mit Δt = 0.005 s zu simulieren. Anschließend vergleichst du die Ergebnisse mit einer semi-impliziten Variante und diskutierst die Energieerhaltung.
Diskretisierung mit explizitem Euler
Beim expliziten Euler werden die Ableitungen durch Vorwärtsdifferenzen ersetzt. Die diskreten Gleichungen lauten:
ω_{k+1} = ω_k - (g/L) * sin(θ_k) * Δt
θ_{k+1} = θ_k + ω_k * ΔtHierbei bezieht sich der Index k auf den aktuellen Zeitschritt, k+1 auf den nächsten. Wichtig: Die rechten Seiten verwenden ausschließlich Werte aus Schritt k. Dieses Verfahren ist einfach zu implementieren, aber es kann zu Energie-Drift führen – ein bekanntes Problem bei der Simulation konservativer Systeme.
Semi-implizites Euler (symplektisches Euler)
Eine Verbesserung bietet das semi-implizite Euler, bei dem die Geschwindigkeit zuerst aktualisiert und dann für die Position verwendet wird:
ω_{k+1} = ω_k - (g/L) * sin(θ_k) * Δt
θ_{k+1} = θ_k + ω_{k+1} * ΔtDurch die Verwendung der neuen Geschwindigkeit ω_{k+1} in der Positionsgleichung wird das Verfahren symplektisch und erhält die Energie über längere Zeiträume besser. Dies ist analog zu modernen KI-Optimierern, die vergangene Gradienteninformationen nutzen, um stabiler zu konvergieren.
Implementierung in MATLAB/Octave
Dein Skript sollte folgende Schritte umfassen:
- Parameter definieren: g = 9.81, L = 1, θ0 = pi/3, ω0 = 0, Δt = 0.005, t_end = 20.
- Zeitvektor erstellen: t = 0:Δt:t_end.
- Arrays für θ, ω, α vorinitialisieren.
- Explizite Euler-Schleife: für k = 1:length(t)-1, α(k) = -(g/L)*sin(θ(k)), ω(k+1) = ω(k) + α(k)*Δt, θ(k+1) = θ(k) + ω(k)*Δt.
- Berechne die Energie pro Masse: E_pot = g*L*(1 - cos(θ)), E_kin = 0.5*L^2*ω^2, E_total = E_pot + E_kin.
- Plotte θ, ω, α über t in einer Figur und E_total in einer zweiten Figur.
- Wiederhole für semi-implizites Euler: zuerst ω aktualisieren, dann θ mit ω_{k+1}.
Beachte: Die Winkelbeschleunigung α wird aus dem aktuellen θ berechnet. Für den semi-impliziten Fall bleibt die α-Berechnung gleich, aber die Reihenfolge der Aktualisierung ändert sich.
Ergebnisse und Diskussion zur Energieerhaltung
Nach der Simulation wirst du feststellen, dass das explizite Euler die Gesamtenergie nicht erhält: Die Energie nimmt im Laufe der Zeit zu (Drift nach oben). Dies liegt an der fehlenden Symplektizität. Das semi-implizite Euler hingegen zeigt eine nahezu konstante Energie über 20 s, mit nur kleinen Oszillationen. Die Energieerhaltung verbessert sich, wenn du die Schrittweite Δt verkleinerst – z. B. auf 0.001 s – da der Diskretisierungsfehler abnimmt. Dies ist vergleichbar mit der Bildqualität in Videospielen: Eine höhere Bildrate (kleinere Zeitschritte) liefert flüssigere Bewegungen.
Wichtig für deine Abgabe: Vergleiche explizit die Energieverläufe beider Verfahren in deinem Bericht. Nutze die Plots, um zu zeigen, dass das semi-implizite Verfahren die Energie besser bewahrt. Erwähne auch, dass eine Halbierung der Schrittweite den Energie-Drift beim expliziten Euler reduziert, aber nicht eliminiert.
Trends und Anwendungen: Von Pendeln zu KI und Finanzen
Die numerische Lösung von Differentialgleichungen ist nicht nur in der Physik relevant. In der Finanzmathematik werden ähnliche Verfahren zur Optionspreisbewertung eingesetzt, und in der KI-Forschung nutzt man symplektische Integratoren für Hamiltonian Neural Networks, die die Energie eines Systems lernen. Auch in der Robotik, z. B. bei der Steuerung von Laufrobotern, kommen Euler-Verfahren zum Einsatz. Dein Verständnis dieser Grundlagen ist daher ein wertvolles Werkzeug für viele moderne Anwendungen.
Fehlerquellen und Tipps
Häufige Fehler sind:
- Verwendung von Grad statt Bogenmaß bei sin(). MATLAB/Octave arbeiten standardmäßig im Bogenmaß.
- Falsche Indizierung: Achte darauf, dass die Arrays korrekt initialisiert sind und die Schleife die richtige Länge hat.
- Vergessen, die Energie für alle Zeitschritte zu speichern.
Teste dein Skript mit kleinen Schrittweiten und überprüfe die Plots auf Plausibilität: Die Winkelposition sollte periodisch zwischen -π/3 und π/3 oszillieren.
Zusammenfassung
In diesem Tutorial hast du gelernt, wie man die Pendelbewegung mit explizitem und semi-implizitem Euler diskretisiert, in MATLAB/Octave implementiert und die Energieerhaltung analysiert. Diese Konzepte sind zentral für CMPSC431W Phase 2 und darüber hinaus für numerische Simulationen in vielen Bereichen. Nutze die bereitgestellten Gleichungen und Tipps, um deine eigenen Plots zu erstellen und eine fundierte Diskussion zu führen.