résolution d'équation différentielle avec python - Python - Programmation
Marsh Posté le 05-06-2017 à 12:08:35
Bonjour,
Cela aiderait déjà de savoir si le problème est lié à l'algo (résultat non attendu) ou au langage (erreur Python).
Marsh Posté le 05-06-2017 à 16:28:59
L'algo ne donne pas le résultat attendu(je l'ai dit dans le premier message puisque ça donne des droites comme trajectoires, les coordonnées sont toujours croissantes en valeur absolue)
Marsh Posté le 05-06-2017 à 16:36:21
Ca pourrait être utile aussi de donner un lien (Wikipédia?) vers cet algo. "méthode d'Euler" ça me dit quelque chose mais j'ai pas ça en tête.
Marsh Posté le 05-06-2017 à 17:01:11
http://desaintar.free.fr/python/tp/tp_euler.pdf
Dans mon cas c'est le cas d'une EDL d'ordre 2 vectorielle.
Marsh Posté le 05-06-2017 à 17:37:22
Oui désolé j'ai oublié la première ligne de ton message pendant que je commençais à regarder.
Je vais peut-être dire de la merde mais pourquoi c'est au cube dans le calcul de la force de gravité entre deux corps :
Code :
|
Marsh Posté le 05-06-2017 à 18:22:16
Normalement c'est au carré et on multiplie par le vecteur directeur de ri-rj.
Or le vecteur directeur est égale à (ri-rj)/(norme(ri-rj))
Ainsi la norme est au cube.
Marsh Posté le 05-06-2017 à 18:36:06
EDIT : ok je viens de comprendre les unités utilisées pour G, je retrouve pareil, une erreur sur ce dernier ou dans la conversion des unités peut conduire à des erreurs de trajectoires donc vérifie bien ça. Je ne vois pas plus d'erreur sinon.
Marsh Posté le 05-06-2017 à 19:57:30
m=[1.0,2.988621344*10**(-6)]
vitesse_initiale=[[0,0,0],[0,6.27,0]]
position_initiale=[[0,0,0],[0.997332336,0,0]]
G=39.34
Il y avait quelques légères erreurs de conversion mais même en les corrigeant j'obtiens encore des droites.
Marsh Posté le 05-06-2017 à 20:29:22
Oui ben a+ le soleil, on part en voyage.
Je ne vois pas non plus, j'avais pensé à un problème de référentiel mais ça ne semble pas non plus être le cas. Essaye toujours de récupérer la norme de ta vitesse voir si elle reste constante.
Marsh Posté le 05-06-2017 à 21:10:54
Merci quand même car je n avais pas pensé aux unités. J ai l impression que pour toutes les conditions initiales ca donne des droites.
Marsh Posté le 05-06-2017 à 21:32:26
Je pense qu'il va falloir débuguer en mettant un n de 2 et un delta t de 0.2 puis ressortir tous les résultats intermédiaires pour voir là où ça déconne.
Marsh Posté le 06-06-2017 à 16:43:10
J'ai lancé une petite simu de ton algo et du coup j'ai vite trouvé l'erreur, dans ton calcul de la force ton vecteur unitaire est dans le sens contraire. En fait à cette étape tu calcules la force exercée par l'autre corps sur ton corps, il faut donc faire p1[k]-p2[k].
Et après ça fonctionne.
Marsh Posté le 06-06-2017 à 22:57:53
J ai fais la modification mais ça fait encore des droites.Sur ton ordi ça marche ?
Marsh Posté le 06-06-2017 à 23:11:45
Points exportés sur Excel.
Code :
|
Tout tourne.
Marsh Posté le 07-06-2017 à 12:18:00
Non c est bon c est juste que j avais modifié un truc. Merci beaucoup
Marsh Posté le 07-06-2017 à 13:26:19
Du coup si ton problème ne vennait pas de là, heureusement qu'il y avait une erreur dans le script sinon on aurait cherché longtemps...
Sans ce changement de signe tu as dans le cas Soleil - Terre, les deux corps qui se fuient donc ça finit en effet en droites mais ça commence quand même par une trajectoire arrondie.
Marsh Posté le 04-06-2017 à 19:44:08
Bonjour, j'essaye de coder un algorithme pour résoudre les équations du problème à N corps mais quand je trace la trajectoire avec la méthode d'Euler j'obtiens des droites ce qui est manifestement faux. Si vous pouviez trouver l'erreur ça serait très sympathique car je la détecte pas.
Merci d'avance(j'ai même codé les méthodes de Runge-Kutta et Verlet mais ça ne fonctionne pas)
Pour les unités j'ai tous mis en unité astronomique.