Unterschiede zwischen numerischen Propagatoren

Ich bin Auszubildender und arbeite an einem im Unternehmen entwickelten numerischen Orbitalpropagator. Ich kann Ihnen den Code nicht zeigen, aber ich kann Ihnen sagen, dass der Propagator entwickelt wurde, um in Simulink zu arbeiten. Meine Aufgabe war es, den Propagator zu extrahieren, um ihn als Matlab-Skript zu verwenden. Um die Funktionsweise meines Skripts zu bewerten, vergleiche ich die erhaltenen Ergebnisse mit denen eines anderen numerischen Propagators (GMAT). Die anfänglichen Orbitalelemente stammen von einer SSO-Repeat-Ground-Track-Umlaufbahn. Im Moment betrachte ich die Störungen nur aufgrund von J2 und verwende einen Integrator vom Typ Runge Kutta vierter Ordnung. Die Analysen mit den beiden Propagatoren über einen Zeitraum von 52 Tagen mit einer festen Schrittweite von 60 Sekunden haben die in der Abbildung gezeigten unterschiedlichen Trends (links zeigt die Orbitalelemente, rechts den Zustandsvektor).

Geben Sie hier die Bildbeschreibung ein

Ich kann diesen Unterschied nicht erklären, insbesondere im Zustandsvektor, von dem die Orbitalelemente abgeleitet sind. Zuerst dachte ich, es läge an den Referenzsystemen, da die GMAT-Daten im ICRF sind, während meine Propagator-Daten im GCRS sind. Also habe ich die gleichen Konvertierungsfunktionen auf die GMAT-Daten angewendet und beim Vergleich (dieser neuen Ergebnisse) mit den ursprünglichen gab es keine Fehler, außer denen aufgrund der numerischen Werte. Also dachte ich, es sei die Geopotentialfunktion, die falsch sei. Aber selbst in diesem Fall waren die von der Funktion berechneten Beschleunigungen, die denselben Zustandsvektor von GMAT übergeben, dieselben wie die von der Software bereitgestellten. Ich denke also, dass es die Schuld des Integrators sein könnte, da es die in der nächsten Abbildung gezeigte periodische Drift des Fehlers gibt.Geben Sie hier die Bildbeschreibung ein

Der Runge-Kutta scheint aber auch im Vergleich zu dem, was ich im Internet gefunden habe, gut aufgestellt zu sein. Können Sie sich einen Grund vorstellen, der diese Diskrepanzen erklärt?

Ich füge weitere Diagramme hinzu, um Ihnen den Trend der Orbitalelemente und des Zustandsvektors in 24 Stunden zu zeigen. Im Laufe der Zeit nehmen die Unterschiede tendenziell zu. Insbesondere scheint mein Propagator im Vergleich zu dem von GMAT beschleunigt zu sein.

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Interessante Frage und direkt zum Thema hier in Space SE!
Entscheidend zu wissen wäre: Werden diese GMAT-Referenzdaten mit genau demselben Setup, Gravitationspotential usw. berechnet oder nur mit einem Setup, das Ihrer Meinung nach gleich sein sollte?
Ja, ich habe sowohl den gleichen Grad als auch die gleiche Reihenfolge für das Geopotential eingestellt, was die einzige Störung ist, die ich in Betracht ziehe, auch die gleichen Orbitalelemente, Epoche und Integrator (RK4 mit 60 Sekunden fester Schrittgröße). Der einzige Unterschied besteht darin, dass GMAT das EGM-96-Modell berücksichtigt, während mein Propagator das EGM-2008 berücksichtigt und auf IERS Tech Note 36-Konventionen basiert. Auch GMAT-Ergebnisse sind im ICRF, während meine im GCRS sind. Aus diesem Grund hatte ich andere Ergebnisse erwartet, aber keinen so hohen Fehler.
...nun, das ist schon eine Menge Dinge, die schief gehen können. Es sind mit ziemlicher Sicherheit diese Details, aus denen die Diskrepanzen stammen, und der ODE-Solver hat nichts damit zu tun. Unterschiedliche Konventionen für Indizes / Komplexe usw. für die Geopotentialkoeffizienten? Etwas in den Koordinatentransformationen? Und Sie verwenden nur Quadrupol, aber GMAT verwendet das vollständige Ding?

Antworten (3)

Sie sollten überprüfen, welchen Propagator GMAT verwendet. Eine RK4-Methode mit konstanter Schrittgröße wird im Laufe der Zeit von der wahren Lösung der ODE abweichen. Wenn GMAT also eine adaptive Schrittgrößenmethode verwendet, die an einigen Stellen von der Größenordnung von Millisekunden bis zu mehreren zehn Sekunden reicht, wird dies wahrscheinlich der Fall sein näher an der Lösung als RK4.

Im Wesentlichen macht die Konstante Schrittgröße von RK4 Folgendes: Geben Sie hier die Bildbeschreibung einEs nimmt mehrere Auswertungen der Ableitung zwischen jetzt und dem nächsten Zeitschritt vor, um eine bessere Schätzung zu erhalten, wie sich die Funktion ändert (im Gegensatz zu einer Euler-Methode 1. Ordnung). ). Anschließend wird ein gewichteter Mittelwert dieser Schätzungen ermittelt, um zu bestimmen, welche Ableitung für diesen Schritt verwendet wird. Wie aus dem Diagramm ersichtlich ist, wird die Fläche unter der Kurve an einigen Stellen unterschätzt und an anderen überschätzt, was im Laufe der Zeit zu Fehlern führt.

Hier ist eine verkleinerte Version (und ein 500-Sekunden-Zeitschritt), um den Effekt zu zeigen.Geben Sie hier die Bildbeschreibung ein

Da Sie 60 Sekunden verwenden, wird der Fehler weniger schnell wachsen, aber dennoch mit der Zeit driften.

Ein Solver mit adaptiver Schrittgröße ändert seine Schrittgröße basierend darauf, wie schnell sich die Ableitung ändert (die zweite Ableitung):Geben Sie hier die Bildbeschreibung ein

Wenn also die Ableitung näher an der Konstante liegt, bedeutet dies, dass die Lösung nahezu linear ist, sodass der Solver größere Zeitschritte ausführen kann. Aber wenn sich die Ableitung ändert, ist die Lösung nichtlinear, der Solver muss kleinere Zeitschritte machen.

Die gebräuchlichste dieser Methoden ist RK4-5, die die Lösung der RK4- und RK5-Methoden vergleicht und je nachdem, wie unterschiedlich sie sind, den Zeitschritt entsprechend ändert.

Insgesamt ist also möglicherweise nichts falsch an Ihrem Modell / Ihrer RK4-Implementierung, es kann davon abhängen, welchen Propagator GMAT verwendet, mit dem Sie Ihre Lösung vergleichen

Wenn Sie neugierig sind, stammen diese Screenshots aus einem Video, das ich zu ODE-Lösern gemacht habe:

@ChrisR Ich habe die Frage nicht gepostet? Ich verwende auch kein Simulink, Matlab oder GMAT
Hallo @AlfonsoGonzalez, danke für deine Antwort. In GMAT (um konsistente Ergebnisse zu erzielen) habe ich einen Runge Kutta 4 verwendet und die Schrittgröße gezwungen, konstant zu bleiben, indem ich 60 Sekunden als minimale und maximale Schrittgröße festlegte. Aus diesem Grund hatte ich erwartet, die gleichen Ergebnisse zu erhalten. Jedenfalls habe ich schon darüber nachgedacht, eine adaptive Schrittweite zu implementieren. Ich werde versuchen, es so zu lösen. Nochmals vielen Dank für die Antwort.
Ich ziehe meinen vorherigen Kommentar zurück. Ich glaube, mein Blick fiel auf den Autor "Zuletzt geändert" und ich dachte, Alfonso hätte die Frage geschrieben und beantwortet. Entschuldigen Sie.
@ChrisR Keine Sorge!
+1Beim Betrachten des ersten Diagramms des OP und des Differenzdiagramms ist mir als erstes aufgefallen, dass das Blau im Vergleich zum Rot immer "unscharf" ist. die Fehlerausschläge innerhalb einer Umlaufbahn scheinen groß zu sein. Das stimmt sicherlich damit überein, dass die Schrittgröße für die verwendete Methode zu groß ist; gemittelt über jede volle Umlaufbahn können die Fehler dazu neigen, sich aufzuheben, aber symmetrische Abweichungen innerhalb der Umlaufbahn können es verrauschter aussehen lassen.
@uhoh danke für deine antwort. Vielleicht ist das "Fuzzy" des Blu auf die im Matlab-Plot festgelegte '--'-Zeilenspezifikation zurückzuführen. Wie würden Sie es trotzdem lösen? Ich habe einen Integrator vom Typ Runge-Kutta-Fehlberg wie empfohlen ausprobiert, aber es hat sich nichts geändert.
@Frank wir können "unscharf" durch "dick" oder "breit" ersetzen. Nun, da es Meinungsverschiedenheiten gibt, können wir wissen, dass eine oder beide ziemlich einfach falsch sind. Ich empfehle, die Integration von allem anderen zu isolieren. Holen Sie sich Ihren Anfangszustandsvektor und starten Sie ein einfaches Programm in Matlab oder besser noch Open-Source-Python und integrieren Sie für einen und dann ein paar Umlaufbahnen und vergleichen Sie direkt. Ich werde in ein paar Stunden eine Antwort darüber hinzufügen, wie das geht.
Ergänzend zum Kommentar von @uhoh könnten Sie auch versuchen, den Unterschied zwischen diesem GMAT-Propagator und Matlabs ode45 (sowie Ihrem Propagator) zu testen. Normalerweise würde ich auch Python ermutigen, aber ich denke, die Firma von OP sucht in Matlab danach

Die vorherigen Antworten enthalten einige gute allgemeine Informationen, aber TBH finde ich nicht sehr hilfreich für die Frage.

Die grundlegendste Plausibilitätsprüfung mit einem numerischen Solver lautet: Wie ändert sich das Ergebnis, wenn Sie die Schrittweite variieren? Halten Sie es so einfach wie möglich. Simulieren Sie über einen einzigen Tag und probieren Sie verschiedene Schrittgrößen aus. Versuchen Sie zum Beispiel einen Schritt von 6 Sekunden, 30 Sekunden, 200 Sekunden, 600 Sekunden. Wie unterscheiden sie sich?

Die 600 Sekunden werden sich wahrscheinlich sehr seltsam verhalten, aber die anderen – ich weiß nicht, Sie sollten es versuchen. Wenn die h = 6 Sekunden-Lösung im Wesentlichen die gleiche ist wie Ihre h = 60 s-Lösung, insbesondere wenn sie durchweg die gleichen Abweichungen vom GMAT aufweist – dann haben Sie offensichtlich ein grundlegenderes Problem, das nichts damit zu tun hat der Integrator überhaupt. Das können viele verschiedene Dinge sein.

Erst wenn Sie festgestellt haben, dass Sie definitiv alles so eingerichtet haben, wie es sein sollte, sollten Sie sich darauf konzentrieren, das Beste aus Ihrem numerischen Löser herauszuholen.

Danke für deine Antwort! Sie haben Recht, ich habe bereits festgestellt, dass das Ändern der Schrittweite die Lösung oder die Abweichungen mit GMAT nicht beeinflusst. Das gleiche passiert mit verschiedenen Integratoren. Das Problem ist, dass ich die Funktion, die die Ableitung des Zustandsvektors berechnet, bereits validiert habe, weil die Ergebnisse die gleichen sind wie bei GMATS. Wenn also der Integrator gut funktioniert und auch die Funktion ausführt, die die Beschleunigungen aufgrund der Störungen berechnet. Was verursacht dieses Problem? Auch bei einer geringeren Höhe und Neigung scheint der Fehler geringer zu sein, selbst wenn er nicht vernachlässigbar ist.

Ihr numerischer Integrator RK4 ist für diese Aufgabe ungeeignet. Die Ordnung ist viel zu niedrig für die gewünschte Genauigkeit. Es ist auch eine feste Schrittgröße. Sie haben Ihre Recherchen dazu nicht durchgeführt. Die Fehlerfortpflanzungsraten für RK-Integratoren mit fester Schrittweite sind so schlimm wie es nur geht. Erforschen Sie Prädiktor-Korrektor-Integratoren höherer Ordnung ... Ordnung 8 mit (mindestens) 64-Bit-Gleitkommaoperationen (auch wenn es sich um feste Schritte handelt).

Sie könnten sich eingebettete RK-Integratoren ansehen, die einen RK-Integrator niedrigerer Ordnung als Prädiktor innerhalb eines RK-Integrators höherer Ordnung verwenden. Sehen Sie sich RK78 als Ersatz für Ihr RK4 an. In der Vergangenheit war dieser Integrator ein Arbeitstier für Orbitalmechaniker. Dieser gibt Ihnen viel bessere Datenvereinbarungen und eine gute Genauigkeit über längere Zeitintervalle.

Adams-Moulton, oder noch besser Adams-Bashforth-Moulton, sind Prädiktor-Korrektoren, die leicht in jeder gewünschten Reihenfolge codiert werden können. Ihre Fehlerfortpflanzungsraten sind geringer als bei jedem RK-Verfahren derselben Größenordnung. Gauss-Radau-Integratoren sind auch sehr genau und gut geeignet für Orbitalmechanik-Integrationen. Codieren Sie sie nicht selbst. Herunterladen.

Es gibt viele Prädiktor-Korrektur-Methoden mit variablen Schritten, die die beste Genauigkeit und die kleinsten Fehlerfortpflanzungsraten über längere Zeitintervalle liefern. Mit diesen Methoden liefern Ihre numerischen Integrationen die beste Genauigkeit, die Sie erwarten können ... aber sie müssen von hoher Ordnung sein. Bestellung 8 ist gut.

Bevor Sie mit irgendeinem hier oder anderswo erwähnten Integrator in Ihr Projekt einsteigen, testen Sie Ihre Integratorauswahl anhand der Lösung des 2-Körper-Problems, ausgedrückt in kartesischen Koordinaten. Das ist die schlechteste Art, die 2-Körper-Gleichungen zu schreiben, und diese Form der Gleichungen wird Ihre Integratoren am besten belasten. Da die 2-Körper-Problemlösung in jedem Koordinatensystem in geschlossener Form vorliegt, werden Sie sehen, wie sich ausgewählte Integratoren in Bezug auf Fehlerfortpflanzung und Genauigkeit über kurze und lange Zeitintervalle verhalten.

Ihr Projekt ist keineswegs trivial, und Sie benötigen einen Integrator, der dieser Aufgabe gewachsen ist. Durch numerische Integrationen des 2-Körper-Problems erhalten Sie eine gute Vorstellung von dem zu verwendenden Integrator. Stellen Sie sicher, dass Ihre Anfangsbedingungen Ihnen eine 2-Körper-Umlaufbahn mit anständig hoher Exzentrizität geben: e >= 0,3. Werden Sie nicht verrückt mit einem sehr hohen e (0,8). Integratoren mit fester Schrittweite werden bei Orbits mit hoher Exzentrizität (e = 0,8) schnell sterben. Ihre Todesrate ist umgekehrt proportional zur Ordnung des Integrators.

Viel Glück.

Hervorragende Antwort! Es ist schön, einen weiteren Fan von Adams Methoden zu sehen. Haben Sie einen Rat, wann Sie sich für Adams-Bashforth-Moulton oder Gauss-Radau entscheiden sollten? Ich habe von letzterem gehört, aber nie benutzt, während ABM ich fast die ganze Zeit benutze.
Vielen Dank für Ihre Antwort, ich habe bereits einen RK89 mit festem Schritt ausprobiert, aber die Ergebnisse sind die gleichen. Auch bei einem RK45 mit adaptiver Stufe ändert sich nichts. Aber Sie haben Recht, dass ich mehr über diese Integratormethoden recherchieren und die am besten geeignete auswählen muss, um das Problem zu lösen. Was ich nicht erklären kann, ist, warum derselbe Propagator in seiner Simulink-Form gut funktioniert, während er als Matlab-Skript Probleme zeigt.
Diese Antwort enthält sicherlich einige gültige Punkte, aber sie sind viel zu pauschal formuliert. Die Löserreihenfolge zu erhöhen, weil etwas Seltsames vor sich geht, das ich nicht verstehe, ist eigentlich eine ziemlich schreckliche Idee. Ja, eine höhere Ordnung kann natürlich eine bessere Genauigkeit ergeben, aber sie löst keine grundlegenden Stabilitätsprobleme und definitiv keine Einrichtungsfehler. RK4 ist gut genug, um diese Dinge zu untersuchen, und die niedrigere Ordnung macht es tatsächlich besser geeignet, um ein Gefühl dafür zu bekommen, wie sich numerische Integratoren mit verschiedenen ODEs und verschiedenen konstanten oder adaptiven Schrittweiten verhalten.
Ich stimme @leftaroundabout zu 1000% zu. Ich würde sagen, dass Sie bei so weichen Problemen wie einer nahezu kreisförmigen Umlaufbahn mit nur einem Quadrupol-Term von 1 Promille mit RK4 oder sogar darunter vollkommen gute Ergebnisse erzielen können, solange Ihre Schrittgröße angemessen ist (Hutspitze an DavidHammen ). Für diese Art von Problem erhalten Sie mit einem Integrator höherer Ordnung die gleiche Genauigkeit mit einer größeren Schrittgröße und damit möglicherweise eine kürzere Rechenzeit, die dafür Bruchteile einer Sekunde oder weniger beträgt
@uhoh ja. Obwohl ich nicht sagen würde, dass „nahezu kreisförmig“ und „nur 1‰ Quadrupol“ Gründe sind, warum ein Löser niedriger Ordnung in Ordnung ist. Sie sind vielmehr Gründe dafür, warum mit der adaptiven Schrittweite nichts gewonnen werden kann. Und das ist eigentlich auch das Szenario, in dem Mehrschrittverfahren höherer Ordnung wirklich glänzen können, die mit großen Schrittweiten und geringem Rechenaufwand Millionen von Umlaufbahnen in die Zukunft berechnen können. ... nur ist das ziemlich sinnlos, wenn die Ergebnisse bereits nach nur einer Handvoll Umläufen falsch sind ... Um in weniger regelmäßigen Situationen weit in die Zukunft zu rechnen, kann eine symplektische Methode niedrigerer Ordnung besser sein.
@leftaroundabout beide können wahr sein, sie sind nicht exklusiv; aber ja, sicherlich hilft die adaptive Schrittgröße in diesem Fall nicht viel. Wenn die Exzentrizität 0,9 wäre oder die Größe der Quadrupolbeschleunigung ähnlich der des Monopols wäre und die Schrittgröße auf 30 Sekunden festgelegt wäre, wäre RK4 mies und eine exotische höhere Ordnung wäre besser, aber ja, Sie haben Recht, RK45 würde sich eingraben und das senken Schrittweite ggf. Ich arbeite gerade an einem Antwortpost...
Hier haben wir wieder einmal Meinungen, keine Fakten über numerische Integrationen von Bahnen der Orbitalmechanik. Ich spüre, dass niemand Erfahrung mit der Fehlerfortpflanzung verschiedener Integrationsmethoden hat. RK4 wird NIEMALS in einer ernsthaften numerischen Untersuchung eines Orbital-Mech-Problems verwendet. Die Ausbreitung von Trunkierungsfehlern ist der Hauptschuldige. Was Sie sich Sorgen machen sollten, ist die Ausbreitung von Rundungsfehlern, und wenn Sie sich darüber Sorgen machen, ist es das Beste (geringste Sorge), das Sie bekommen können.
Außerdem ist e = 0,9 nicht von wirklichem oder akademischem Interesse. Eine 30-Sekunden-Schrittweite wird Ihre RK4-Ausgabe dank des schnellen Aufbaus von Abschneidefehlern glücklich zerstören. Das Hauptproblem bei Integratoren niedriger Ordnung ist die Ausbreitung von Abschneidefehlern. Rundungsfehler werden nie ein Problem sein. Sie möchten einen Integrator verwenden, bei dem Ihre einzige Sorge die Ausbreitung von Rundungsfehlern ist. Warum 64-Bit-Gleitkomma und einen Integrator niedriger Ordnung verwenden? Kleine Schrittgrößen zum Kompensieren von Integratoren niedriger Ordnung mit festen Schritten sind wegen des schnellen Aufbaus von Abschneidefehlern niemals eine praktikable Lösung.
Einige hervorragende Integratoren mit variabler Schrittweite für Umlaufbahnprobleme verwenden Änderungsraten von 3-D-Trajektorienkrümmungen, um Änderungen der Schrittgröße zu bestimmen. Das Hinzufügen solcher Überlegungen zum Integratorcode erfordert sehr wenige zusätzliche Codezeilen, indem die Werte der Zustandsvariablen verwendet werden, die im vorherigen Schritt erhalten wurden. Der variable Schritt hilft, die Fehlerfortpflanzung zu minimieren. Warum nicht verwenden? Es kostet nicht viel im Ausführungstiming.
Ryan C: Ich persönlich mag Gauss-Radau wegen seiner Komplexität nicht. Es ist schwierig, dem Code zu folgen (zumindest für mich). Ich füge gerne Features zu vorgefertigtem Code hinzu, und das ist mit Gauss-Radau schwer zu bewerkstelligen. ABM ist einfach selbst zu codieren. Sie können einen ABM-Code mit einer Eingabe erstellen, die die Reihenfolge der Methode angibt. Ich habe mit diesem Thru-Order 25 (viel zu hoch!) und 128-Bit-Gleitkommazahlen experimentiert. ABM ist sehr effizient, und Sie können die Reihenfolge so anpassen, dass Sie bei jedem Schritt direkt auf dem Rundungsfehler der Maschine fahren. Mit mehr Anpassungen können Sie die Reihenfolge während der Integration ändern, während Sie fortfahren.
Plus eins nur für „Nicht selbst codieren. Herunterladen.“
@AngePurs Das Problem mit ABM ist, dass es eine ODE erster Ordnung integriert. Während eine ODE zweiter Ordnung in erste Ordnung umgewandelt werden kann, wirft dies Geometrie aus. Es gibt Variationen von ABM, die Position und Geschwindigkeit separat behandeln, wie Störmer-Cowell und Gauss-Jackson. Randbemerkung: Eine zu hohe Ordnung im Integrator (nicht zu verwechseln mit der Ordnung der ODE) kann zu Genauigkeits- und Stabilitätsverlust führen. Die 25. Ordnung ist viel zu hoch, es sei denn, man verwendet Arithmetik mit extrem erweiterter Genauigkeit - und dann zahlt man einen hohen Rechenpreis für die Verwendung von Arithmetik mit extrem erweiterter Genauigkeit.