Gravitation

Un mini-modèle de gravitation en python

a marqué ce sujet comme résolu.

L'attraction gravitationnelle de Jupiter est donc environ 15 fois plus forte.

Si on fait sauter grossièrement 10% des interactions, ça fait quand même une grosse erreur (surtout sur un système chaotique…).

L'influence de Mars sur Jupiter (en terme d'accélération) est de l'ordre de la masse de Mars sur la distance carrée, celle de Jupiter sur Mars est de l'ordre de la masse de Jupiter sur la distance carrée.

Mars fait en gros $3\cdot 10^{-4}$ fois la masse de Jupiter. Négliger un terme de l'ordre du pour mille (en prenant en compte les 7 autres planètes), c'est se tirer une balle dans le pied et ruiner tous les efforts fait sur la discrétisation du problème (qui entraine ici une erreur de l'ordre de $\Delta t^3\approx 10^{-9}$ avec un pas $10^{-3}$).

Je viens de voir le thread sur la news et j'ai survolé rapidement la discussion.

Une solution au problème d'intégration numérique pour le problème à n corps est l'utilisation d'un intégrateur en temps symplectique qui sont destinés spécifiquement à l'intégration en mécanique Newtonienne. L'exemple le plus courant est le "velocity Verlet" (http://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet) ou le "leapfrog".

Je connais de nom (jamais fait en pratique). Le truc, c'est que Euler est souvent suffisant, et que je voulais un truc vite fait. Mais si on veut aller plus loin, c'est effectivement une bonne méthode.

+0 -0

Et le code de @dri1 est bien meilleur que celui que j'ai présenté (calcul matriciel, moins d'approximation…).

C'est pas forcément gagné. Si je conserve pas l'énergie (en fait, je n'ai pas vérifié), c'est moins bien. C'est beaucoup plus lourd théoriquement et en terme de code, donc il faudrait vérifier que ça vaut le coup.

J'avais fait tourner avec 9 planètes en utilisant les données dispo sur le site de la NASA. Si ça tourne pas trop mal à court terme, j'ai Mercure qui est éjecté invariablement au bout de quelques années et du coup les autres planètes qui commencent à faire n'importe quoi (par contre, bon point, les perfs sont toujours au rendez-vous sans aucun effort supplémentaire apporté :p ).

Du coup, je ne sais pas si c'est du à une erreur théorique, une erreur de code, ou encore tout simplement que l'horizon de Lyapunov de mon système est de l'ordre de quelque années…

Je sais que je me répète. Mais mon message n'était manifestement pas passé.

Qu'un schéma ait un ordre supérieur ne le rend pas forcément meilleur. À autres qualités (stabilité, conservation de l'énergie) équivalentes par rapport à un autre schéma d'ordre inférieur, s'il débouche sur une simulation aussi rapide à pas de temps identique, alors oui, il est clairement mieux. Si le schéma d'ordre inférieur est capable de fournir une simulation de même durée avec un pas de temps nettement inférieur, il se peut très bien que celui-ci soit meilleur.

Pour l'histoire de faire les choses de manière explicite ou implicite, le choix se fait en fonction du problème à modéliser. Par exemple, pour modéliser des phénomènes dominés par l'advection, on préfère des schémas explicites (pour des raisons de précision), alors que pour des phénomènes essentiellement diffusifs, on préfère plutôt des schémas implicites (pour des raisons de stabilité). Pour le cas qui nous intéresse, on a tout intérêt à utiliser un schéma symplectique, i.e. qui trouve le "juste milieu" entre un schéma explicite "pur" et un schéma implicite "pur", sinon une planète va rapidement, et incorrectement, soit se faire éjecter, soit se crasher sur le Soleil.

On a ici une équation très simple. Donc, ça ne me semble pas rentable d'utiliser un intégrateur d'ordre trop élevé, qui rend les calculs lourds et donc empêche de prendre un pas de temps petit. Il ne faut pas non plus avoir peur de la condition CFL : les planètes sont supposées se mouvoir à des vitesses ne variant que très peu, sans pic de vitesse imprévisible, en tout cas avant l'horizon de Lyapunov ; donc, il suffit de choisir un pas de temps suffisamment petit, et tout devrait bien se passer.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte