Méthode d'Euler ordre 2 trajectoire satellite

Répondre

Messages : 2

Enregistré le : 26 sept. 2020 17:23

Classe : MP

Méthode d'Euler ordre 2 trajectoire satellite

Message par AlexQui » 22 sept. 2021 21:51

Bonjour,

Je souhaite programmer la représentation de la trajectoire d'un satellite autour de la Terre en Python, je me concentre pour le moment sur la trajectoire du satellite et non sur l'aspect graphique que je programmerai avec Tkinter par la suite. J'ai obtenu deux équations différentielles d'ordre 2, une selon x et une autre selon y en coordonnées cartésiennes à l'aide d'un PFD, qui sont les suivantes :

d²x/dt²+GM_T*x/((x²+y²)^3/2)=0
d²y/dt²+GM_T*y/((x²+y²)^3/2)=0

(j'ai simplifié par la masse m du satellite et j'ai négligé les frottements pour le moment) avec G la constante de gravitation et M_T la masse de la Terre.
J'ai appliqué la méthode d'Euler et j'ai le programme suivant :

Code : Tout sélectionner

from scipy import*
from pylab import*
 
def euler(x0,y0,n,tf):
    T=[0]
    X=[0]
    Y=[0]
    h=tf/float(n)
    x,y,G,M_T=x0,y0,6.67*10**(-11),5.972*10**24
    t=0
    while t<tf:
        x+=h*(-G*M_T*x)/((x**2+y**2)**3/2)
        y+=h*(-G*M_T*y)/((x**2+y**2)**3/2)
        t+=h
        X.append(x)
        Y.append(y)
        T.append(t)
    plot(Y,X)
    show()
Mon programme ne fonctionne pas (il renvoi une droite) et je comprends bien sûr que mon problème est dû au fait que je ne prends pas en compte le temps t dont dépendent x et y mais je ne vois pas comment faire. Pourriez-vous m'éclairer ?
2020-2021 : MPSI Chrestien de Troyes
2021-2022 : MP Chrestien de Troyes

Messages : 0

Enregistré le : 13 févr. 2018 09:22

Re: Méthode d'Euler ordre 2 trajectoire satellite

Message par matmeca_mcf1 » 28 sept. 2021 13:00

Il y a deux problemes.

Tout d’abord, il y a un effet de bord, vous calculez le nouveau x avant de le réutiliser dans le calcul de y.

Mais plus fondamentalement, vous avez appliqué la méthode d’Euler Explicite à l’équation
$$ \vec{r}’=-\frac{\mathcal{G}M_T}{r^3}\vec{r} $$
et non à
$$ \vec{r}’’=-\frac{\mathcal{G}M_T}{r^3}\vec{r} $$

Je peux d’ors et déjà vous annoncer qu’Euler explicite va donner une spirale divergente comme trajectoire lorqu’il est appliqué à ce problème. Si c’est pour un TIPE, je vous conseille d’implémenter Störmer-Verlet en lieu et place d’Euler explicite.
Ancien ENS Cachan (maths) 1999--2003
Enseignant-Chercheur à l'Enseirb-Matmeca (Bordeaux INP) filière matmeca
Les opinions exprimées ci-dessus sont miennes et ne reflètent pas la position officielle de l'école dans laquelle j'enseigne.

Messages : 9664

Enregistré le : 30 juil. 2008 16:59

Classe : Dr.-Ing

Re: Méthode d'Euler ordre 2 trajectoire satellite

Message par fakbill » 28 sept. 2021 15:58

Houla.
Déjà quel est le but?
Apprendre la méthode d'Euler ou tracer des trajectoires et voir ce que ça donne en fonction des méthodes numériques de résolution mises en oeuvre et des pas de temps?
Si c'est le second cas alors ne réinvente pas surtout la roue. Tu as tout ce qu'il faut dans scipy pour résoudre ces équa diff numériquement.

Cependant, il te faut déjà comprendre une chose :
Euler, Runge Kutta et autres, sont de base des méthodes pour résoudre des équa diff d'ordre 1.
La 3ième loi de Newton c'est une equa diff d'ordre 2. As tu compris comment on transforme une équa diff d'ordre 2 en équa diff d'ordre 1??

Bref, commence par coder Euler pour résoudre y'=y avec y(0)=1. Une fois fait, joue avec le dt et voit à quelle vitesse la solution numérique diffère de la solution analytique.
Ensuite tu pourras t'attaquer à Newton.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Messages : 9664

Enregistré le : 30 juil. 2008 16:59

Classe : Dr.-Ing

Re: Méthode d'Euler ordre 2 trajectoire satellite

Message par fakbill » 28 sept. 2021 15:58

"Je peux d’ors et déjà vous annoncer qu’Euler explicite va donner une spirale divergente comme trajectoire lorqu’il est appliqué à ce problème. Si c’est pour un TIPE, je vous conseille d’implémenter Störmer-Verlet en lieu et place d’Euler explicite."

Oui! mais il lui faut comprendre pas mal de choses avant d'en arraiver là.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Messages : 2

Enregistré le : 26 sept. 2020 17:23

Classe : MP

Re: Méthode d'Euler ordre 2 trajectoire satellite

Message par AlexQui » 10 oct. 2021 12:52

J'essaie donc pour le moment de programmer la méthode d'Euler sur Python pour un vecteur avec une fonction f que je modifierai plus tard pour appliquer ce programme à un cas plus concret. J'ai le code suivant :

Code : Tout sélectionner

from numpy import*
from pylab import*
 
def f(x,y,vx,vy):
    return([vx,vy,ax,ay])
 
def euler(x0,y0,vx0,vy0,n,tf):
    X=[]
    Y=[]
    h=tf/float(n)
    t=0
    v=array(([x0,y0,vx0,vy0]))
    k=0
    while t<tf:
        v+=h*f(v[0][k],v[0][k],v[0][k],v[0][k])+v[-1]
        X.append(v[k][0])
        Y.append(v[k][1])
        k+=1
    plot(X,Y)
    show()
    return v
Ce code ne marche pas, il n'y a pas la gestion de t donc la boucle while fonctionne sans s'arrêter mais je ne pense pas que ce soit le seul problème.

Pourriez-vous me donner des indications pour corriger mon programme ?
2020-2021 : MPSI Chrestien de Troyes
2021-2022 : MP Chrestien de Troyes

Messages : 9664

Enregistré le : 30 juil. 2008 16:59

Classe : Dr.-Ing

Re: Méthode d'Euler ordre 2 trajectoire satellite

Message par fakbill » 11 oct. 2021 17:50

Commence par écrire l'équa diff que tu veux résoudre puis les étapes de la méthode d'euler sans te préocuper de la syntaxe python. Une fois que tu es convaincu que ça fonctionne alors tu peux le coder.

Une commentaire sur le langage:
from numpy import*
from pylab import*
c'est très mauvais. il ne faut importer que ce dont on a besoin. Pourquoi? parce que le sqrt de numpy n'est pas le même que le sqrt de scipy ou que celui de python de base. Si tu "import *", tu ne vas jamais être sûr des fonctions que tu utilises.

Ps : C'est étrange de dire "sur python". Python est un langage, pas un outil. On dit donc "en python".
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Répondre