Was ist die richtige Art der Integration in Astronomiesimulationen?

15

Ich erstelle einen einfachen Astronomiesimulator, der die Newtonsche Physik verwenden soll, um die Bewegung von Planeten in einem System (oder anderen Objekten) zu simulieren. Alle Körper sind Kreise in einer euklidischen Ebene mit Eigenschaften wie Position, Geschwindigkeit, Masse, Radius und der resultierenden Kraft.

Ich möchte das Universum in kleinen Zeitschritten aktualisieren, normalerweise in wenigen Millisekunden, bin mir aber nicht sicher, wie ich die Positionsänderungen korrekt berechnen soll.

Die Kraft ist einfach: fr = sum(G * body.m * bodyi.m / dist(body, bodyi)^2).

Aber wie gehe ich von dort aus weiter?

Ich könnte das machen:

a = Fr/body.m
v += a*dt
position += v*dt

Aber das wäre natürlich falsch. Vielleicht, wenn ich 0,5 als Faktor für die Positionsberechnung hinzufüge?

jcora
quelle
Es ist zu lustig, um es nicht zu kommentieren: Es ist in der Tat ein häufiges astronomisches Problem, die Bewegung von "Pflanzen" zu simulieren
;-)

Antworten:

17

Sie haben im Wesentlichen die Antwort - keine Notwendigkeit für den Faktor 0,5.

Im Wesentlichen haben Sie ein zweidimensionales System von ODEs erster Ordnung: wobei alles eine Funktion der Zeit ist, außer vermutlichm, und Punkte Zeitableitungen bezeichnen. Wenn Sie eine einfache, vorwärts Euler-ähnliche Differenzierung erster Ordnung von diesen durchführen, finden Sie x n + 1 -xn

x˙=vv˙=Fm,
m bzw. xn+1
xn+1-xnΔt=vnvn+1-vnΔt=Fnm,
Hier indiziere ich den Zeitschritt mitn.
xn+1=xn+Δtvnvn+1=vn+ΔtFnm.
n

Forward-Euler ist jedoch von Natur aus instabil. Glücklicherweise gibt es gleich um die Ecke eine symplektische Methode . (Das verbundene Artikel mehr ein Stub ist, aber es könnte einige nützlichen Verbindungen enthalten.) Der Schlüssel ist , um vorab Positionen von bis t n + 1 Geschwindigkeiten bei Verwendung von t n + 1 / 2 . Das heißt, angenommen , Sie erhielten x 0 und v 1 / 2 für jedes Teilchen. Dann könnten Sie x n + 1 verwendentntn+1tn+1/2x0v1/2

xn+1=xn+Δtvn+1/2vn+1/2=vn-1/2+ΔtFnm

v1/2v0

ω=GMr3,
Mr

quelle
Hey, kannst du erklären, warum ich den 0.5Faktor nicht brauche ? Es scheint dasselbe zu tun, als würde man die Geschwindigkeit vor n-1/2dtSekunden messen, wie es scheint, als würden Sie vorschlagen.
Jcora
(n-1)vnvn+1vn0