Numerik: Wie normalisiere ich die folgende ODE?

9

In dieser Frage geht es mehr darum, wie ein Problem numerisch angegangen werden kann.

In einem kleinen Projekt wollte ich die Coorbitalbewegung von Janus und Epimetheus simulieren. Dies ist im Grunde ein Drei-Körper-Problem. Ich wähle Saturn als Fix am Ursprung, sei und r 2 die Ortsvektoren von Janus bzw. Epimetheus. Da der Effekt auftritt, wenn Janus und Epimetheus sehr nahe beieinander liegen, habe ich relative Koordinaten für eine bessere Auflösung ausgewählt, dh r = r 1 - r 2 und R = r 1 + r 2 . Jetzt bekomme ich folgende Bewegungsgleichungen:r1r2r=r1r2R=r1+r2

d2dt2(Rr)=G(m2±m1)RR34MG(r+R(r+R)3rR(rR)3)

wobei den Massen der Monde entspricht, die Masse des Saturn und die Gravitationskonstante ist. Das Problem entsteht, wenn ich versuche, dies numerisch zu lösen. Man muss sich mit Werten völlig unterschiedlicher Größen befassen, dh und . Und , liegen in den Bereichen von 0 bis 150.000.miMGMe28mie17rR

Um ehrlich zu sein, bin ich mir nicht sicher, ob dies der Ort ist, an dem solche numerischen Probleme diskutiert werden können.

Mehr Informationen:

Code ist in Matlab geschrieben und ich verwende einen Standard-ODE-Solver, um das Ergebnis zu erhalten. Dies bricht jedoch zusammen, da die Schrittgröße unter Maschinengenauigkeit nicht reduziert werden kann. (Ich finde das nicht überraschend, weil man sich mit den bereits erwähnten Größenordnungen auseinandersetzen muss).

GertVdE
quelle
2
Führen Sie diese Simulation in SI-Einheiten aus? Zumindest sollten Sie alles durch einen Faktor von dividieren , damit Sie einige Größenordnungen eliminieren können. Gm2
Hallo, ich das, aber es funktioniert immer noch nicht ... Die gleichen Probleme treten auf wie zuvor. :(
Sie müssen Ihre Masseneinheit auf eine der Mondmassen und Ihre Längen- / Zeiteinheiten auf 1 einstellen. Nichts sollte kleiner als 1/100 sein, wenn Sie es gut schreiben. Es ist kein Over-the-Counter-Solver erforderlich. Schreiben Sie dazu selbst Code, in dem Sie die Schrittweite steuern. Bei Kollisionen, bei denen der Löser versucht, die Schrittgröße bis zur Konvergenz zu reduzieren, kann es bei diesen Arten von Potentialen zu einer Unterbrechung der Schrittgröße kommen, und bei einer Kollision findet keine Konvergenz statt. Sie müssen sicherstellen, dass die Umlaufbahnen nicht kollinear sind, also müssen Sie die Simulation anzeigen. Sie können keine Antwort bekommen, wie sie ist.
Ron Maimon
1
Bitte vermeiden Sie Abkürzungen im Titel. DGL = Differentialgleichung?
Welchen Standard-ODE-Solver verwenden Sie?
Geoff Oxberry

Antworten:

2

Ihr aktueller Ansatz ruiniert die numerische Stabilität. In der Tat verlieren Sie wahrscheinlich die Auflösung auf diese Weise.

Nehmen Sie als Koordinaten für jeden Satelliten seine Kepler-Variablen und den Winkel der Ebene, der die Position des Satelliten, die Geschwindigkeit und den Ursprung enthält. Die Differentialgleichungen ohne Wechselwirkung zwischen den Satelliten sind dann trivial einfach, und nur die Wechselwirkung wird etwas kompliziert. Da die Interaktion winzig ist, wenn die Satelliten weit entfernt sind, sollte die resultierende Dynamik numerisch stabil sein.

Arnold Neumaier
quelle
2

Anstatt einen "klassischen" (steifen) ODE-Löser zu verwenden, können Sie dedizierte Algorithmen für die geometrische numerische Integration verwenden. Siehe zum Beispiel dieses Buch und die BNE-Codes, die Sie auf der Website von Ernst Hairer finden .

GertVdE
quelle
0

Wie wäre es, wenn Ihre Simulation drei Schritte umfasst:

  1. Aktualisieren Sie die Janus-Position, indem Sie die Janus-Saturn-Kraft berechnen.
  2. Aktualisieren Sie die Epimetheus-Position, indem Sie die Epimetheus-Saturn-Kraft berechnen.
  3. Aktualisieren Sie die Position von Janus und Epimetheus, indem Sie die Janus-Epimetheus-Kraft berechnen.

Möglicherweise mit feineren Zeitschritten für # 3.

Ich bin mir nicht sicher, ob dies helfen wird. Ich nehme an, das eigentliche Problem ist, dass die Stärke der Kraft im Fall Mond - Mond und Mond - Saturn unterschiedlich ist, außer wenn die Monde nahe sind.

Alternative:

  1. Wenn sich die Monde schließen, berechnen Sie eine ungefähre Monde - Saturnkraft unter Verwendung ihres Massenschwerpunktvektors und aktualisieren Sie beide Positionen mit demselben Vektor.
  2. Wenn sie weit voneinander entfernt sind, aktualisieren Sie sie separat.
  3. wie vorher.

Viel Glück!


quelle