Lösungsverfahren höherer Genauigkeit
Wir wollen hier nicht die ganze Theorie der numerischen Integrationsmethoden diskutieren, dafür gibt es hinreichend und gute Literatur, wie z.B.Viel mehr wollen wir uns um die Anwendungsseite kümmern. Also Fragen wie
- Stabilität der Lösung,
- erzielbare Genauigkeit,
- Rechenaufwand und
- Komplexität und Implementierbarkeit der Lösung
Definitionen
Um ein Verfahren nach den genannten Gesichtspunkten beurteilen zu können, bedarf es einiger Begriffe und das Wissen um ihre Bedeutung:Schritt: ein Schritt (eigentlich Integrationsschritt) bedeutet die Berechnung eines Wertes i+1 auf dem Wert i basierend. Wird dabei nur auf den Wert i zurück gegriffen, handelt es sich um ein Einschrittverfahren.
Alle EULER-CAUCHY-Verfahren sind Einschrittverfahren. Die Anzahl der Schritte nimmt Einfluss auf die Genauigkeit und auf den Rechenaufwand.
Stufe: ein Verfahren wird s-stufig bezeichnet, wenn innerhalb eines Schrittes der Wert der Gradientenfunktion f(x,y) s-mal berechnet werden muss. EULER-CAUCHY-Verfahren sind einstufig.
Das einfache EULER-CAUCHY-Verfahren ist ein 1-stufiges Verfahren. Anzahl der Stufen nimmt starken Einfluss auf die Genauigkeit und auf den Rechenaufwand. Der Implementierungsaufwand steigt nur mäßig.
Ordnung: ein Verfahren ist von der Ordnung (eigentlich Konsistenz-Ordnung) p, wenn der Restfehler kleiner als (Δt) p ist.
Das einfache EULER-CAUCHY-Verfahren ist von der Ordnung p = 1. Verfahren niedriger Ordnung sind nicht geeignet für Lösungen, die über längere Zeiten hohe Genauigkeit verlangen. Mit einer verkleinerten Schrittweite allein ist das nicht zu schaffen!
Abb. Fehlerentwicklung beim EC-Verfahren (Ordnung p = 1)
Leapfrog- und VERLET-Verfahren
Die einfachsten Lösungsverfahren höherer Genauigkeit sind das Leapfrog- und das VERLET-Verfahren. Beide wurden ursprünglich für konservative Systeme, d.h. also reibungsfreie Anordnungen, entwickelt. Sie gehen auf die selbe Grundidee zurück: durch lineare Interpolation von Zwischenwerten von Ort s sowie Geschwindigkeit v und Anwendung des Energie erhaltenden symplektischen EULER-CAUCHY-Verfahrens werden Ort und Geschwindigkeit stets zu unterschiedlichen Zeitpunkten berechnet. Der Zwischenschritt wird erzeugt, indem das Zeitintervall Δt halbiert wird. Zu je einem halbierten Intervall i -> i+1/2 bzw. i+1/2 -> i+1 der Dauer Δt/2 erfolgt je eine symplektische Berechnung von Ort und Geschwindigkeit ( a und b):Zunächst sieht es so aus, als würde nur die Schrittweite verringert und dadurch ein Genauigkeitsvorteil gewonnen. Das ist aber nicht die ganze Wahrheit. Werden nämlich a) und b) in einander überführt, zeigt sich, dass
Wenn wir nun noch etwas aufräumen, erhalten wir mit den VERLET-Algorithmus, um genau zu sein, den velocity VERLET-Algorithmus:
Ich erwähnte schon, dass beide Verfahren für Systeme ohne Reibungseinfluss wie z.B. die Planetenbewegung oder die Molekularbewegung entwickelt worden sind. Dort sind die Differentialgleichungen nicht von der Geschwindigkeit v abhängig und f(s,v) wird zu f(s).
Das Leapfrog-Verfahren nach a) und b) kann, weil die 2. und die 3. Formel in einen Schritt zusammengefasst werden können, vereinfacht auch so geschrieben werden ():
Wenden wir jetzt auf das schon bekannte Problem des hängend angeordneten Feder-Masse-Systems an. Die ersten beiden Zeilen bereiten keine Probleme, aber in der dritten Zeile tritt nun die implizite Abhängigkeit der Geschwindigkeit vi+1 auf. Da uns dieser Wert aktuell nicht zur Verfügung steht, dieser aber "nur" auf die Reibungswirkung Einfluss nimmt, erstzen wir hier die Geschwindigkeit vi+1 durch die Zwischengeschwindigkeit vi*. Das ist nicht korrekt, aber zu verschmerzen. Wissen wir doch aus den vorangegangenen Experimenten (explizites EC-Verfahren), dass ein fehlerhaftes Zeitverhalten durch mehr oder weniger Reibungseinfluss kompensiert werden kann. Das werden wir nun auch tun ():
Abb. Listing des Leapfrog-Algorithmus
Die Implementierung des VERLET-Algorithmus nach stößt auf das selbe Problem der implizit auftretenden Geschwindigkeit vi+1. Daher auch die gleiche Kur zur Lösung des Problems:
Abb. Listing des VERLET-Algorithmus
Das Beispielprogramm zeigt das Verhalten eines schwingenden Systems, wobei zwei Lösungsmethoden - VERLET und leapfrog - gegenüber gestellt werden. Mit den Schiebereglern können wieder Eigenfrequenz und Dämpfung des Systems eingestellt werden. Mit dem Button Width kann die Schrittweite der Integration gewählt werden. Zum Vergleich ist auch das implizite EULER-CAUCHY in die Betrachtung einbezogen.
Achtung! die Mittlungsdauer für die Fehlerermittlung ist relativ groß, so dass Du etwa 10 s warten musst, bevor gültige Ergebnisse angezeigt werden!
Fazit: Sowohl das leapfrog- als auch das VERLET-Verfahren sind einstufige Einschritt-Verfahren der 2. Konsistenzordnung. Wie zeigt, ist der energetische Fehler, den beide Verfahren aufweisen, um eine 10er-Potenz kleiner als bei den einfachen EC-Verfahren. Zudem weist die quadratische Abhängigkeit des Energiefehlers auf die Ordnung p = 2 hin.
Abb. Fehlerentwicklung über der Schrittweite
Warum höhere Genauigkeit?
Warum eigentlich benötigen wir Lösungsverfahren mit einer höheren Genauigkeit? Unsere bisherigen Erfahrungen, ob bei translatorischen Aufgaben oder bei der Rotation, mit dem einfachen Symplektische Lösungsverfahren waren doch alle hinreichend gut. Hinreichend natürlich im Sinne der Spielephilosophie! So lange es sich um einfache Differentialgleichungen 2. Ordnung handelt, müsste hinzugefügt werden. Die eigentliche Herausforderung bilden nämlich die verkoppelten Differentialgleichungen, die teilweise sogar nichtlinear sind. Verkoppelte Differentialgleichungen beschreiben zusammegesetzte Systeme, bei denen eine wechselseitige Abhängigkeit der Variablen der beteiligten Einzelsysteme bestehen. Dabei gibt es Fälle von extremen Abhängigkeiten, den sog. steifen Differentialgleichungen. Der Begriff "steif" ist nirgendwo exakt definiert und rührt offenbar von Feder-Masse-Systemen mit einer steifen Feder her. "Steife" Feder bedeutet, dass die Federkonstante n sehr groß ist, was zu einer hohen Eigenfrequenz des Systems führt. Dies wiederum hat schnelle Wechsel der Geschwindigkeits- bzw. Ortsfunktion zur Folge. Ist dann die Schrittweite des Lösungsverfahrens nicht klein genug, kann es zu großen Abweichungen von der realen Schwingung kommen und das System wird schnell instabil.Um die Auswirkung mangelnder Genauigkeit auf verkoppelte Systeme zu untersuchen, betrachten wir im folgenden einen Fall ohne Reibungseinfluss. Ein solcher Fall ist die Bewegung eines Planeten oder Kometen um ein Zentralgestirn - in der Tat gänzlich reibungsfrei.
Abb. Kometenbahn
Beim EC-Algorithmus sieht die Lösung noch sehr überschaubar aus. Jeder neue Geschwindigkeitswert vi+1 oder ωi+1 wird aus einem Satz alter Werte berechnet. Die Ortswerte ri+1 bzw. φi+1 werden symplektisch aus den neuen Geschwindigkeitswerten berechnet.
on/off
Zunächst auf die Radial-Komponente...
Diese Lösung besteht nun darin, dass wir mit Hilfe des einfachen EC-Algorithmus aus a) und c) eine Schätzung der Werte vi+1 und ωi+1 gewinnen und diese in den rechten Seiten der untersten Gleichungen von a) und b) einsetzen. Das ist zwar nicht das Ideal, aber besser als die Verwendung der alten Funktionswerte (dieses Verfahren wird übrigens bei allen impliziten Lösungsmethoden angewendet, sofern die Gradientengleichungen eine einfache Auflösung nicht erlauben).
Ergebnisdiskussion: Obwohl das eigentlich für energetischen Erhalt stehende symplektische EULER-CAUCHY-Verfahren im ersten Fall angewendet wird, reicht bei einer Schrittweite von Δt ≈ 80 s die Genauigkeit nicht aus, um eine wie auch immer geartete Umlaufbahn zu erzeugen. Selbst bei noch kleineren Schrittweiten sind die erzeugten Umläufe so falsch, dass eine geschlossene Umlaufbahn nicht zu Stande kommt. Das ist auch für die Spieleentwicklung nicht zun tolerieren! Hingegen erreicht der VERLET-Algorithmus dieses Ziel. Fehler die dennoch auftreten, treten in der Nähe des Zentralgestirns besonders deutlich in Erscheinung. Sie sind in jedem Fall deutlich geringer als beim EC-Verfahren.
Die Tatsache des vergrößerten Energiefehlers in der Nähe des Zentralgestirns deutet darauf hin, dass die Grandientenfunktionen dort besonders schnellen Änderungen unterliegen (siehe steife DGl.!).