Page 1 sur 1

Méthode d'Euler ordre 2 trajectoire satellite

Publié : 22 sept. 2021 21:51
par AlexQui
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 ?

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

Publié : 28 sept. 2021 13:00
par matmeca_mcf1
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.

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

Publié : 28 sept. 2021 15:58
par fakbill
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.

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

Publié : 28 sept. 2021 15:58
par fakbill
"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à.

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

Publié : 10 oct. 2021 12:52
par AlexQui
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 ?

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

Publié : 11 oct. 2021 17:50
par fakbill
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".