N-Body problem approximator
Contextualisation
Travail final dans le cadre du cours d'algorithmes numériques.
Cahier des charges
Objectifs principaux
- Simulation fonctionnelle de 3 corps
-
Choix d'une configuration de base des corps.
-
Possiblité de dynamiquement changer la masse d'un corp
Objectifs secondaires
- n corps
- collisions
- interaction avancée
Il n'existe qu'une unique configuration de base autre que celle qui
permet d'ajouter un corps à la fois. Il s'aggit de celle générée en
cliquant droit. J'aurais souhaité faire plus comme par exemple trouver
les conditions initiales de systèmes bien connu mais je n'ai
malheureusement pas eu le temps de le faire pour cette itération.
Méthodologie
Pour le n-body problem, nous avons i corps situés en Xi avec
une vélocité Vi au temps 0 et nous souhaitons connaitre les Xi et les
Vi avenir. Mathématiquement nous cherchons une solution au problème:
Nous faisons face ici à une EDO et la plus simple façon de la résoudre
numériquement est d'utliser la methode d'Euler qui consiste à avancer
d'un petit pas h à chaque itération pour tout approximer de
façon linéaire. Il nous faut donc trouver une formule qui nous
permette de calculer l'état du système au temps t + h à partir
de l'état au temps t et ainsi de suite:
Cette methode a une précision d'approximativement O(h^2). Il vaut mieux l'éviter pour
une simulation qui tend à être réaliste mais dans le cadre de ce projet, elle fera le travail.
Ici, nous avons un problème de conservation de l'énergie totale du système, il est aisé de modifier
légèrement nos formules pour yield un meilleur résultat qui rend l'application plus réaliste en
utilisant une méthode dit "sympletic": la methode semi-oimplicide d'Euler.
La principale différence est uniquement le fait qu'à chaque itération, la vélocité est mise à jour
avant celle des positions. Ce simple changement n'améliore pas la précision globale mais permet
au système de se comporter de façon plus réaliste.
Conclusion
J'ai pris beacoup de plaisir à faire ce programme. J'aurais souhaité pouvoir le pauffiner encore et
encore, tant le sujet est interessant. C'est incroyablement jouissif d'implémenter des mécanismes
qui semble si complexes en quelques lignes de code tout en comprenant ce qu'il se passe et comment
influencer le tout.