Partage
  • Partager sur Facebook
  • Partager sur Twitter

Méthode d'Euler

    9 octobre 2021 à 21:54:35

    Bonjour,

    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 ?

    • Partager sur Facebook
    • Partager sur Twitter
      11 octobre 2021 à 3:45:31

      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.
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        11 octobre 2021 à 9:41:40

        Fais attention avec tes import *, tu écrase des références.

        Fais plutôt :

        from numpy import array
        from pylab import plot, show



        • Partager sur Facebook
        • Partager sur Twitter
          19 octobre 2021 à 11:01:33

          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)"""



          • Partager sur Facebook
          • Partager sur Twitter
            19 octobre 2021 à 13:00:11

            Bonjour,

            Super !

            Par contre, à quoi sert le paramètre "fonction" dans la fonction extract() ?

            Apparemment, il n'est pas utilisé ...

            • Partager sur Facebook
            • Partager sur Twitter
              2 novembre 2021 à 12:54:28

              Phil_1857 a écrit:

              Bonjour,

              Super !

              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"

              • Partager sur Facebook
              • Partager sur Twitter

              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.
              • Editeur
              • Markdown