Numérique: Comment puis-je renormaliser l'ODE suivant


9

Cette question porte davantage sur la façon d'aborder un problème numériquement.

Dans un petit projet, je voulais simuler le mouvement coorbital de Janus et Epimetheus. Il s'agit essentiellement d'un problème à trois corps. Je choisis Saturne à fixer à l'origine, soit r1 et r2 les vecteurs de localisation de janus et epimetheus, respectivement. Puisque l'effet se produit lorsque Janus et Epimetheus sont très proches l'un de l'autre, j'ai choisi des coordonnées relatives pour une meilleure résolution, c'est-à-dire r=r1r2 et R=r1+r2 . Maintenant, je reçois les équations de mouvement suivantes:

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

où correspond aux masses des lunes, est la masse de Saturne et la constante gravitationnelle. Le problème se pose lorsque j'essaie de résoudre ce problème numériquement. Il faut traiter des valeurs de magnitudes complètement différentes, c'est-à-dire et . Et , sont dans les régions de 0 à 150 000.miMGMe28mie17rR

Pour être honnête, je ne sais pas si c'est le lieu idéal pour discuter de ces problèmes numériques.

Plus d'information:

Le code est écrit dans Matlab et j'utilise un solveur ODE standard pour obtenir le résultat. Cependant, cela tombe en panne car la taille du pas ne peut pas être réduite avec la précision de la machine. (Je ne trouve pas cela surprenant car il faut faire face aux ordres de grandeur déjà mentionnés).


2
Exécutez-vous cette simulation en unités SI? Au minimum, vous devez tout diviser par un facteur , de manière à pouvoir éliminer quelques ordres de grandeur. Gm2

Salut, je cela, mais ça ne fonctionne toujours pas ... Les mêmes problèmes se produisent comme avant. :(

Vous devez définir votre unité de masse sur l'une des masses de la lune, et vos unités de longueur / temps pour régler les choses à 1. Rien ne devrait être inférieur à 1/100 si vous l'écrivez bien. Il n'y a pas besoin d'un solveur en vente libre. Écrivez le code pour le faire vous-même, où vous contrôlez la taille du pas. Des pannes de taille de pas avec ces types de potentiels peuvent se produire lors de collisions, où le solveur essaiera de réduire la taille de pas jusqu'à la convergence, et lors d'une collision, il n'y a pas de convergence. Vous devez vous assurer que les orbites ne sont pas colinéaires, vous devez donc visualiser la simulation. Vous ne pouvez pas obtenir de réponse telle quelle.
Ron Maimon

1
Veuillez éviter les abréviations dans le titre. DGL = Differentialgleichung?

Quel solveur ODE standard utilisez-vous?
Geoff Oxberry

Réponses:


2

Votre approche actuelle ruine la stabilité numérique; en fait, vous perdez probablement la résolution de cette façon.

Prenez comme coordonnées pour chaque satellite ses variables Kepler et l'angle du plan contenant la position du satellite, la vitesse et l'origine. Les équations différentielles en l'absence d'interaction entre les satellites sont alors trivialement simples, et seule l'interaction devient quelque peu compliquée. Comme l'interaction est minime si les satellites sont éloignés, la dynamique résultante devrait être numériquement stable.


2

Au lieu d'utiliser un solveur ODE "classique" (rigide), vous pouvez utiliser des algorithmes dédiés pour l'intégration numérique géométrique. Voir par exemple ce livre et les codes GNI que vous pouvez trouver sur le site Web d'Ernst Hairer .


0

Que diriez-vous si vous avez trois étapes dans votre simulation:

  1. mettre à jour la position de Janus en calculant la force Janus - Saturne.
  2. mettre à jour la position d'Epimetheus en calculant la force d'Epimetheus - Saturne.
  3. mettre à jour la position de Janus et d'Epimetheus en calculant la force de Janus - Epimetheus.

Peut-être en utilisant des pas de temps plus fins pour # 3.

Je ne sais pas si cela vous aidera. Je suppose que le vrai problème est que l'ampleur de la force est différente dans la lune - la lune et la lune - le cas de Saturne, sauf si les lunes sont proches?

Alternativement:

  1. si les lunes se ferment, calculez une lune approximative - la force de Saturne en utilisant leur vecteur de centre de masse et mettez à jour les deux positions avec le même vecteur.
  2. s'ils sont éloignés, mettez-les à jour séparément.
  3. comme avant.

Bonne chance!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.