Je souhaite 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'essaie de programmer pour le moment quelque chose de général. J'ai le code suivant :
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 cesse mais je ne pense pas que ce soit le seul problème.
Pourriez-vous me donner des indications pour corriger mon programme ?
Salut, vaut mieux tard que jamais ... Tu ne donnes pas les données utilisées. Je ne pourrais pas tester ton code. J'ai déjà fait un copier-coller de ce que tu as codé ici.
Le Tout est souvent plus grand que la somme de ses parties.
Merci pour vos messages, j'ai finalement réussi. Le programme suivant renvoie la représentation d'un satellite autour de la Terre en prenant en compte les frottements :
from numpy import array,dot
from pylab import plot,show
from math import sqrt
G, M_T, R_T,P,Cx = 6.67*10**(-11), 5.972e24, 6.4e6,1.2,0.47
def f(vecteur):
"""
Une matrice colonne qui continet les CI de la position et de la vitesse en x et y : renvoie la dérivée et l'accélération selon x et y
"""
Fx=-(G*M_T*vecteur[0])/((vecteur[0]**2+vecteur[1]**2)**(3/2)) #force de gravitation en x
Fy=-(G*M_T*vecteur[1])/((vecteur[0]**2+vecteur[1]**2)**(3/2)) #force de gravitation en y
Frx=(P*0.58*Cx*sqrt(vecteur[2]**2+vecteur[3]**2)*vecteur[2])/2 #force de trainée en x
Fry=(P*0.58*Cx*sqrt(vecteur[2]**2+vecteur[3]**2)*vecteur[3])/2 #force de trainée en y
return([vecteur[2],vecteur[3],Fx+Frx/(43.6),Fy+Fry/(43.6)])
def euler(x0,y0,vx0,vy0,n,tf):
h=tf/float(n)
v=[array(([x0,y0,vx0,vy0]))]
t=0
while t<tf:
new=dot(h,f(v[-1]))+v[-1]
v.append(new)
t=t+h
return v
def extract(fonction,x0,y0,vx0,vy0,n,tf):
"""
Une fonction (ici euler) et les CI de la position et de la vitesse en x et y : renvoie la trajectoire du débris
"""
X=[0]
Y=[0]
E=euler(x0,y0,vx0,vy0,n,tf)
for k in range(0,len(E)):
X.append(E[k][0])
Y.append(E[k][1])
plot(X,Y)
show()
"""extract(euler,400e3 + R_T, 0, 0, 7.6e3, 86400, 86400)"""
Par contre, à quoi sert le paramètre "fonction" dans la fonction extract() ?
Apparemment, il n'est pas utilisé ...
Oui j'aurais du remplacer euler dans la fonction extract() par "fonction"
Méthode d'Euler
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.