Simulation gravitationnelle
Répondre à la discussion
Affichage des résultats 1 à 22 sur 22

Simulation gravitationnelle



  1. #1
    Coban

    Simulation gravitationnelle


    ------

    Bonjour,
    J'aimerai réaliser un petit logiciel permettant de simuler le comportement de plusieurs corps soumis à la gravitation.
    Pour cela, je compte, pour chaque corps, calculer deux vecteurs représentant les deux forces auxquelles il est soumis, faire la somme de ces deux vecteurs puis déplacer le corps en fonction de ce dernier vecteur image par image.
    Je n'ai pas de problème concernant le calcul de la force gravitationnelle, la première force agissant sur le corps.
    Cependant , je ne sais pas comment calculer la deuxième force qui est due à sa vitesse, sa masse, celle qui fait qu'un satellite tourne et ne tombe pas tout droit.
    J’imagine que vous voyez bien ce que je désigne par là et que vous pourrez me donner des indications concernant le calcul de cette force.
    Merci de vos réponses,

    Coban

    -----

  2. #2
    lucas.gautheron

    Re : Simulation gravitationnelle

    Bonsoir,

    Il n'y a pas de "deuxième force". Le satellite tombe en permanence. Mais la Terre, par exemple, ne s'écrase pas sur le Soleil, parce que sa vitesse lui permet de maintenir un mouvement elliptique (presque circulaire en fait).

    Vous n'avez qu'à appliquer la 2eme loi de Newton sachant que l'unique force en présence est celle résultant de la gravitation. Attention : s'il y a plusieurs corps, il faut sommer toutes les forces de gravitations dues à chacun des corps.

    Au final le système d'équation régissant le problème à N corps parait extrêmement simple. Et pourtant, au delà de 2 corps, on ne sait plus le résoudre analytiquement, sauf quelques cas particuliers.
    Numériquement donc, une fois les équations bien posées, la programmation est plutôt simple (si l'on s'en tient à la méthode classique du calcul des n² interactions).

    Prenez le temps de bien maitriser les bases de la mécanique newtonienne avant de réaliser ce logiciel.
    Le problème n'est pas très complexe mais il est très intéressant. J'ai moi même fait un programme permettant de résoudre numériquement le problème (avec également prédiction d'éclipses :P). Vous pourrez obtenir plus d'infos à propos de mon logiciel sur mon profil.

    A+
    Étonnant, non ?

  3. #3
    albanxiii
    Modérateur

    Re : Simulation gravitationnelle

    Bonjour,

    Citation Envoyé par Coban Voir le message
    Pour cela, je compte, pour chaque corps, calculer deux vecteurs représentant les deux forces auxquelles il est soumis, faire la somme de ces deux vecteurs puis déplacer le corps en fonction de ce dernier vecteur image par image.
    J'ai du mal à voir ce dont vous parlez. Quelles sont ces deux forces ?

    Si vous avez corps en interaction gravitationnelle, chacun est soumis à forces de la part des autres corps.

    Un membre de ce forum ( http://forums.futura-sciences.com/me...gautheron.html ) a réalisé un programme qui simule le mouvement de planètes sous l'influence de la gravité uniquement. Vous pouvez voir le résultat ici : http://orbit.sciencestechniques.fr/ ainsi que des explications.

    @+

    edit : grillé par le membre en question J'espère que vous ne m'en voulez pas d'avoir indiqué votre profil et votre site....
    Dernière modification par albanxiii ; 04/04/2013 à 18h12.
    Not only is it not right, it's not even wrong!

  4. #4
    obi76

    Re : Simulation gravitationnelle

    Bonjour,

    si tu as calculé la force, tu as donc l'accélération de ces corps.

    Là où tu te trompes : c'est que le déplacement des corps ne se détermine pas "juste" avec une somme de forces, mais nécessite une intégration temporelle.
    Tu détermine l'accélération )à laquelle est soumis chaque corps, et tu dis qu'à un pas de temps dt plus tard, sa nouvelle vitesse est :



    EDIT : c'est une première : double grilled

    EDIT 2 : j'avais jamais vu le code de lucas.gautheron, bien comme truc, et pas mal fichu le rendu
    Dernière modification par obi76 ; 04/04/2013 à 18h16.
    \o\ \o\ Dunning-Kruger encore vainqueur ! /o/ /o/

  5. A voir en vidéo sur Futura
  6. #5
    Paraboloide_Hyperbolique

    Re : Simulation gravitationnelle

    Bonsoir,

    C'est un bon petit exercice de méthodes numériques, qui est plus compliqué qu'il n'y paraît.

    Par contre, je ne vois pas de quoi vous parlez avec "deux forces pour chaque corps". Pour un système à N corps, il y a (N-1) forces qui s'appliquent sur chaque corps (que l'on peut composer en une seule). Plus précisément, il s'agit de résoudre l'équation différentielle:



    Avec:

    : la masse du corps i.
    : la constante gravitationnelle universelle.
    : le vecteur joignant le corps i au corps j.
    : la norme euclidienne du vecteur précédent.
    : le vecteur unitaire pointant du corps i vers le corps j.

    Le "tout" est de trouver une bonne approximation de la dérivée seconde qui apparaît dans la première équation. C'est plus compliqué qu'il n'y paraît car cette équation diverge quand deux corps se rapprochent trop (le modèle numérique peut alors "exploser"; c'est-à-dire donner un résultat aberrant) et il faut choisir un pas de temps qui soit numériquement stable (dépendant de la manière dont on discrétise la dérivée seconde).

    Arf, triplement grillé
    Dernière modification par Paraboloide_Hyperbolique ; 04/04/2013 à 18h24.

  7. #6
    lucas.gautheron

    Re : Simulation gravitationnelle

    Bonsoir albanxiii,

    Citation Envoyé par albanxiii Voir le message
    J'espère que vous ne m'en voulez pas d'avoir indiqué votre profil et votre site....
    Bien au contraire, j'en suis flatté


    Citation Envoyé par obi76 Voir le message

    EDIT 2 : j'avais jamais vu le code de lucas.gautheron, bien comme truc, et pas mal fichu le rendu
    Merci, mais vous êtes trop aimable, le code mériterait en effet un petit coup de balai je ne trouve plus vraiment le temps pour ça.

    Citation Envoyé par Paraboloide_Hyperbolique Voir le message
    Bonsoir,

    Le "tout" est de trouver une bonne approximation de la dérivée seconde qui apparaît dans la première équation. C'est plus compliqué qu'il n'y paraît car cette équation diverge quand deux corps se rapprochent trop (le modèle numérique peut alors "exploser"; c'est-à-dire donner un résultat aberrant) et il faut choisir un pas de temps qui soit numériquement stable (dépendant de la manière dont on discrétise la dérivée seconde).

    Arf, triplement grillé
    Je me souviens d'un message de LPFR (merci à lui) à propos d'une méthode d'adaptation du pas (afin de contrôler l'erreur sur une itération).
    Voici un article faisant référence à cette méthode :
    http://en.wikipedia.org/wiki/Adaptive_stepsize

    Autre chose : même si ce n'est pas très courant (càd c'est pas de chance si ça arrive) il peut être utile de vérifier que les corps ne sont pas entrés en collision afin d'éviter des aberrations. Mais cela nécessite une donnée supplémentaire (dimension des corps).

    A+
    Étonnant, non ?

  8. #7
    Coban

    Re : Simulation gravitationnelle

    merci pour vos réponses et tout ces conseils
    ton programme est sympa,
    étant en 1ère , je me passerai bien de résoudre des équations différentielles...
    Je n'ai pas besoin d'une précision extrême, c'est juste pour m'amuser un peu,
    ne puis-je pas tout simplement additionner le vecteur accélération déduit de la 2ème loi de newton avec un vecteur vitesse?
    Pour accélérer les calculs, j’imaginai sommer les forces induites par les différents corps en cherchant leur centre de masse puis en faisant un seul calcul par corps, qu'en pensez vous?

  9. #8
    obi76

    Re : Simulation gravitationnelle

    Citation Envoyé par Coban Voir le message
    merci pour vos réponses et tout ces conseils
    ton programme est sympa,
    étant en 1ère , je me passerai bien de résoudre des équations différentielles...
    Pour le coup tu n'as pas trop le choix : ce que tu veux résoudre est une équa diff.

    Citation Envoyé par Coban Voir le message
    Je n'ai pas besoin d'une précision extrême, c'est juste pour m'amuser un peu,
    Ca, on comprend bien, c'est ce que je faisait à ton age, et ce que lucas.gautheron faisait aussi.

    Citation Envoyé par Coban Voir le message
    ne puis-je pas tout simplement additionner le vecteur accélération déduit de la 2ème loi de newton avec un vecteur vitesse?
    Non, ça n'a physiquement aucun sens d'ajouter une accélération et une vitesse : ce n'est pas la même chose. Ce que je te disait, c'est de multiplier ton accélération par un pas de temps que tu peut fixer à l'avance (oublie ces histoires de pas de temps variable pour le moment) : tu ajoutes ce produit (qui est un vecteur) à ta vitesse. Là, ça a un sens, et pour être franc, c'est la méthode de résolution la plus simple et la moins précise que tu puisse avoir pour un problème comme celui-ci.

    Citation Envoyé par Coban Voir le message
    Pour accélérer les calculs, j’imaginai sommer les forces induites par les différents corps en cherchant leur centre de masse puis en faisant un seul calcul par corps, qu'en pensez vous?
    qu'avant de complexifier le problème, fait comme on vient de te dire : tu n'auras pas plus simple. Si tu arrive à avoir des résultats concluants, on pourra commencer à chercher d'autres méthodes si tu veux, mais ça peut très vite devenir extrêmement complexe.

    Citation Envoyé par lucas.gautheron Voir le message
    Merci, mais vous êtes trop aimable, le code mériterait en effet un petit coup de balai je ne trouve plus vraiment le temps pour ça.
    j'ai eu le même problème : à force de faire des trucs à droite à gauche, lors de mes études je n'ai plus eu le temps de les rendre propre : je les ai mis à disposition sur vbfrance, que les autres en profitent
    Dernière modification par obi76 ; 04/04/2013 à 23h39.
    \o\ \o\ Dunning-Kruger encore vainqueur ! /o/ /o/

  10. #9
    Coban

    Re : Simulation gravitationnelle

    je peut donc ajouter le vecteur accélération au vecteur vitesse, il me surfit de prendre un pas de temps de 1
    merci pour vos explications, je m'y met.

  11. #10
    albanxiii
    Modérateur

    Re : Simulation gravitationnelle

    Re,

    Citation Envoyé par Coban Voir le message
    je peut donc ajouter le vecteur accélération au vecteur vitesse, il me surfit de prendre un pas de temps de 1


    @+
    Not only is it not right, it's not even wrong!

  12. #11
    obi76

    Re : Simulation gravitationnelle

    Comme le fait judicieusement remarquer Albanxiii :

    Citation Envoyé par albanxiii Voir le message
    qui s'explique par le fait que justement, tout le problème de ce que tu veux faire réside au choix de ce pas de temps. Dire "ben je m'en tape, c'est égale à 1" [quoi ? patates, siècles, miles/h ?] c'est juste faire l'aveugle sur LE problème que l'on veut résoudre...
    \o\ \o\ Dunning-Kruger encore vainqueur ! /o/ /o/

  13. #12
    Coban

    Re : Simulation gravitationnelle

    Il ne s'agissais pas de modéliser un système réel, mes unités sont arbitraires et les constantes sont égales à 1.
    J'ai terminé une première version qui marche plutôt bien quand les corps sont relativement éloignés.
    Quand deux corps se rapprochent trop, le programme donne lieu à des aberrations comme l'avais suggéré Paraboloide_Hyperbolique:
    les deux corps proches accélèrent à toute vitesse et sont projetés dans des directions à peu près opposés.
    Pour éviter ça, j’imaginais faire intervenir une deuxième force de faible porté mais de forte intensité qui permettrais d’empêcher les corps de trop se rapprocher un peu comme la force électrostatique.
    Je me pose cependant une question:
    Seule la constante G ou q différencie l'expression des forces électrostatiques et gravitationnelles, les forces électrostatiques et gravitationnelles entre deux corps de masse et de charge constante devraient donc être proportionnelles si on fait varier la distance non?
    Cela ne parait pourtant pas être le cas puisque l'on dit que la force électrostatique prime sur la force gravitationnelle sur de courtes distances et inversement sur de longues distances.

  14. #13
    obi76

    Re : Simulation gravitationnelle

    Pour résoudre les abérations, il vous faudra un pas de temps variable, et par conséquent les critères de stabilité sont des critères PHYSIQUES, vous ne pourrez pas y couper.

    Dire dt = constant = 1 (vous n'avez toujours pas répondu : 1 quoi ?) ça peut conduire à des instabilités et des résultats incohérents. Il faut utiliser un pas de temps variable.

    Enfin après... faites comme vous voulez.
    \o\ \o\ Dunning-Kruger encore vainqueur ! /o/ /o/

  15. #14
    Coban

    Re : Simulation gravitationnelle

    c'est à dire qu'il faudrait diminuer le pas de temps lorsque deux corps sont trop proches pour diminuer l’erreur?

  16. #15
    obi76

    Re : Simulation gravitationnelle

    exactement
    \o\ \o\ Dunning-Kruger encore vainqueur ! /o/ /o/

  17. #16
    Coban

    Re : Simulation gravitationnelle

    Autant toujours garder un pas le plus petit possible.
    Si on change le pas, les performances vont fluctuer, la vitesse d’affichage aussi.
    Si on se débrouille pour garder la même vitesse d'affichage, alors autant toujours garder le petit pas de temps.

    J'aurais bien aimé calculer l’erreur. Pour cela j'avais pensé à calculer l’énergie cinétique du système total, l’erreur doit être proportionnelle au fluctuations d’énergie non?

    peut on, pour cela, faire, Ec = 1/2mv2 avec m la masse totale des corps et v la moyenne de tous les vecteurs vitesse?

  18. #17
    lucas.gautheron

    Re : Simulation gravitationnelle

    Citation Envoyé par Coban Voir le message
    Autant toujours garder un pas le plus petit possible.
    Si on change le pas, les performances vont fluctuer, la vitesse d’affichage aussi.
    Si on se débrouille pour garder la même vitesse d'affichage, alors autant toujours garder le petit pas de temps.

    J'aurais bien aimé calculer l’erreur. Pour cela j'avais pensé à calculer l’énergie cinétique du système total, l’erreur doit être proportionnelle au fluctuations d’énergie non?

    peut on, pour cela, faire, Ec = 1/2mv2 avec m la masse totale des corps et v la moyenne de tous les vecteurs vitesse?
    Bonsoir.

    L'énergie cinétique totale se calcule comme la somme des énergies cinétiques des corps du système. C'est donc .
    Cette énergie varie au cours du temps, mais cela est tout à fait normal. (même s'il n'y avait pas d'erreur de calcul). Par exemple lorsque la Terre est au périhélie (sa distance au Soleil est minimale), alors sa vitesse et donc son énergie cinétique sont maximales. Mais c'est l'inverse à l'aphélie. Pourtant il y a conservation de l'énergie. Ce qui devrait être invariant est l'énergie mécanique du système. Il faut donc calculer la somme des énergies cinétiques et la somme des énergies potentielles de gravitation (qui est la somme des énergies potentielles de chaque corps divisée par 2 car une interaction lie 2 corps).
    Dès lors les variations de l'énergie mécanique ne seront dues qu'à l'erreur accumulée.
    Vous dites : " l’erreur doit être proportionnelle au fluctuations d’énergie non?".
    L'erreur sur quoi ?

    A+
    Étonnant, non ?

  19. #18
    obi76

    Re : Simulation gravitationnelle

    Citation Envoyé par Coban Voir le message
    Autant toujours garder un pas le plus petit possible.
    Si on change le pas, les performances vont fluctuer, la vitesse d’affichage aussi.
    Si c'était si simple. Dans le "pire" des cas, deux astres peuvent se toucher -> le pas de temps deviendrai nul. Dans ce cas, si tu mets un très très petit pas de temps, ça restera en générale stable (et encore, ça dépend), et en plus ton temps de simulation va exploser.

    Citation Envoyé par Coban Voir le message
    Si on se débrouille pour garder la même vitesse d'affichage, alors autant toujours garder le petit pas de temps.
    Certes, mais avec un pas de temps ridiculement petit, ton affichage n'évoluera quasiment pas.

    Citation Envoyé par Coban Voir le message
    J'aurais bien aimé calculer l’erreur. Pour cela j'avais pensé à calculer l’énergie cinétique du système total, l’erreur doit être proportionnelle au fluctuations d’énergie non?

    peut on, pour cela, faire, Ec = 1/2mv2 avec m la masse totale des corps et v la moyenne de tous les vecteurs vitesse?
    à la louche comme ça, je pense qu'il faudrait une condition de stabilité dépendante de la vitesse relative radiale des objets entre eux. Un produit scalaire, un coefficient et hop : un pas de temps...
    \o\ \o\ Dunning-Kruger encore vainqueur ! /o/ /o/

  20. #19
    Coban

    Re : Simulation gravitationnelle

    Vous ne pensez pas que l'énergie cinétique du centre de masse du système est invariante?
    Une accélération du centre de masse devrait trahir une erreur non?
    Un corps qui est brusquement accéléré par l’erreur au passage très proche d'un autre corps devrais augmenter la vitesse du centre de masse, lorsque cette accélération est détectée, on pourrais soustraire l’énergie cinétique correspondante, au corps ayant brusquement accéléré non?

  21. #20
    LPFR

    Re : Simulation gravitationnelle

    Citation Envoyé par Coban Voir le message
    Vous ne pensez pas que l'énergie cinétique du centre de masse du système est invariante?
    Une accélération du centre de masse devrait trahir une erreur non?
    Un corps qui est brusquement accéléré par l’erreur au passage très proche d'un autre corps devrais augmenter la vitesse du centre de masse, lorsque cette accélération est détectée, on pourrais soustraire l’énergie cinétique correspondante, au corps ayant brusquement accéléré non?
    Bonjour.
    Pour faire des calculs il faut que vous utilisiez le repère lié au centre de masses du système qui est de ce fait immobile. Mais cela vous oblige à calculer aussi la position du Soleil comme pour tous les autres corps.
    Pour l'erreur, on peut calculer l'énergie totale du système (cinétique + potentielle). S'il n'y avait pas d'erreur de calcul, elle devrait rester constante.
    C'est en affichant cette valeur que je me suis aperçu que des méthodes simples de calcul de systèmes d'équations différentielles (comme Runge_Kuta) ne suffisaient pas et qu'il fallait utiliser des méthodes avec pas adaptatif.
    Au revoir.

  22. #21
    obi76

    Re : Simulation gravitationnelle

    Re,

    pour vous rassurer LPFR, même avec un RK et pas adaptatif, on ne conserve pas l'énergie, j'avais déjà essayé. Il faut rajouter un terme correctif.

    Bref, je pense que les meilleurs conseils ont été donnés à Coban, s'il veut vraiment n'en faire qu'à sa tête....
    Dernière modification par obi76 ; 07/04/2013 à 11h11.
    \o\ \o\ Dunning-Kruger encore vainqueur ! /o/ /o/

  23. #22
    LPFR

    Re : Simulation gravitationnelle

    Bonjour Obi.
    J'avais fini par utiliser les programmes tous faits de "Numerical recipes" et l'énergie se conservait bien (avec des erreurs tolérables). Même dans le cas de "presque collisions" ou le calcul ralentit visiblement pendant que les deux objets sont très proches.
    Cordialement,

Discussions similaires

  1. Constante gravitationnelle
    Par invitedcf0c52f dans le forum Physique
    Réponses: 10
    Dernier message: 28/11/2012, 21h56
  2. Réponses: 11
    Dernier message: 24/03/2010, 18h30
  3. Schéma de Godunov et simulation gravitationnelle
    Par ydethe dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 07/12/2009, 10h19
  4. force gravitationnelle
    Par invite3569df15 dans le forum Physique
    Réponses: 2
    Dernier message: 16/01/2006, 12h33
  5. Lentille gravitationnelle
    Par EspritTordu dans le forum Archives
    Réponses: 5
    Dernier message: 15/06/2005, 22h39