Quelle est la bonne façon de s'intégrer dans les simulations astronomiques?

15

Je crée un simulateur d'astronomie simple qui devrait utiliser la physique newtonienne pour simuler le mouvement des planètes dans un système (ou tout autre objet, d'ailleurs). Tous les corps sont des cercles dans un plan euclidien, qui ont des propriétés telles que la position, la vitesse, la masse, le rayon et la force résultante.

Je veux mettre à jour l'univers par petits pas de temps, généralement quelques millisecondes, mais je ne sais pas comment calculer correctement les changements de position.

La force est simple: fr = sum(G * body.m * bodyi.m / dist(body, bodyi)^2).

Mais comment dois-je continuer à partir de là?

Je pourrais faire ça:

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

Mais ce serait, bien sûr, faux. Peut-être que si j'ajoutais 0,5 comme facteur dans le calcul de la position?

jcora
la source
C'est trop drôle pour ne pas commenter: C'est en effet un problème astronomique commun de simuler le mouvement des "plantes" ;-)
Wolfgang Bangerth

Réponses:

17

Vous avez essentiellement la réponse - pas besoin du facteur 0,5.

Essentiellement, vous avez un système bidimensionnel d'ODO de premier ordre: où tout est fonction du temps sauf vraisemblablementm, et les points désignent des dérivées temporelles. Si vous effectuez une différenciation simple et directe d'Euler-esque de ceux-ci, vous trouverez x n + 1 -xn

X˙=vv˙=Fm,
m ou xn+1
Xn+1-XnΔt=vnvn+1-vnΔt=Fnm,
Ici, j'indexe le pas de temps avecn.
Xn+1=Xn+Δtvnvn+1=vn+ΔtFnm.
n

Cependant, forward-Euler est intrinsèquement instable. Heureusement, il existe une méthode symplectique au coin de la rue. (Cet article est lié plus d'un talon, mais il peut contenir des liens utiles.) La clé est de positions à l'avance de à t n + 1 en utilisant des vitesses à t n + 1 / 2 . C'est, supposons que vous avez reçu x 0 et v 1 / 2 pour chaque particule. Ensuite, vous pouvez utiliser x n + 1tntn+1tn+1/2X0v1/2

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

v1/2v0

ω=gMr3,
Mr

la source
Hé, pouvez-vous expliquer pourquoi je n'ai pas besoin du 0.5facteur? Il semble faire la même chose que de prendre de la vitessen-1/2dt il y a quelques secondes, ce que vous semblez suggérer.
jcora
Ce ne serait le même que si la vitesse à était de 0. Ce que vous voulez, c'est une estimation de premier ordre de la moyenne de v n et v n + 1 (ce dernier que vous ne connaissez pas), pas le moyenne de v n(n-1)vnvn+1vn0