IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Runge Kutta d'ordre 4


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Par défaut Runge Kutta d'ordre 4
    Bonsoir, j'étudie la trajectoire d'un lanceur. Le lancer est supposé vertical, le système est soumis aux forces de frottements de l'air, à son poids (pas à la force de Coriolis). J'ai ainsi établi une équation différentielle, et je veux appliquer la méthode Runge Kutta d'ordre 4 pour la résoudre.
    Voilà le code. J'ai un message d'erreur qui s'affiche et je ne vois pas le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if z2<100000:
    ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    alt,vit=[0],[0]
    z2,y,x = 0,0,0.6371009*(10**(-19))
    w=2*np.pi/(23*3600+59*60+4) #rad/s#vitesse de rotation de la terre(465,1 m/s )
     
    for i in range (l-3):
        if z2<100000:
            k1 = -g + (pousse[i] - 0.5*Cx*maitre_couple(tps[i])*masse_volumique(z2)*v**2)/masse[i] + x*w**2
        else:
            k1 = -g + pousse[i]/masse[i] + x*w**2
        if z2< 100000:
            k2 = -g + ((pousse[i]+pousse[i+1])/2 - 0.5*Cx*(np.pi*(5.425/2)**2 + 2*np.pi*(3.15/2)**2)*masse_volumique(z2)*((y+(pas[i]*k1/2))**2))/(masse[i]+masse[i+1])/2 + x*w**2
        else:
            k2 = -g +(pousse[i]+pousse[i+1])/2 + x*w**2
        if z2< 100000:
            k3 = -g + ((pousse[i]+pousse[i+1])/2 -0.5*Cx*(np.pi*(5.425/2)**2 + 2*np.pi*(3.15/2)**2)*masse_volumique(z2)*(y+1/2*pas[i]*k2)**2)/(masse[i]+masse[i+1])/2 + x*w**2
        else:
            k3 = -g + (pousse[i]+pousse[i+1])/2 + x*w**2
        if z2<100000:
            k4 = -g + ((pousse[i+1]+(y+pas[i]*k3)*debitm[i+1])/masse[i+1]) + x*w**2
        else:
            k4 = -g + (poussee[i+1]/masse[i+1]) + x*w**2
        y+=pas[i]*(k1/6 + k2/3 + k3/3 + k4/6)
        z2+=y*pas[i]
        x+=y*pas[i]
        alt.append(z2)
        vit.append(y)
    #plt.plot(tps[0:683],alt, label='altirkf')
    plt.plot(tps[0:684], vit)
    plt.legend
    plt.show()
    Pouvez-vous m'aider svp

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Le message d'erreur est clair. Vous tenter de comparer un tableau (z2) à une valeur. Vous meme vous vous y prendriez comment pour faire cela ? ...

    A vue de nez il vous manque des [i].

    2 remarques :
    1) scipy contient déjà un schéma runge kutta 4 (scipy.integrate.ode)
    2) Si vous utilisez numpy, vous n'avez justement plus besoin de parcourir vos tableaux puisque vous pouvez faire des opérations sur des tableaux entier sans avoir systématiquement à parcourir un à un les éléments de chaque array. Vous devriez vous plongez dans un tuto numpy.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Le message d'erreur est clair. Vous tenter de comparer un tableau (z2) à une valeur. Vous meme vous vous y prendriez comment pour faire cela ? ...

    A vue de nez il vous manque des [i].

    2 remarques :
    1) scipy contient déjà un schéma runge kutta 4 (scipy.integrate.ode)
    2) Si vous utilisez numpy, vous n'avez justement plus besoin de parcourir vos tableaux puisque vous pouvez faire des opérations sur des tableaux entier sans avoir systématiquement à parcourir un à un les éléments de chaque array. Vous devriez vous plongez dans un tuto numpy.
    Bonjour,
    je vais essayer les schémas proposés par python alors. Le soucis, c'est que je n'arrive pas à définir proprement ma fonction f à mettre en argument, comme je travaille avec des tableaux.
    Mais ici, z2 est un floattant (il vaut zero au départ), que j'ajoute ensuite à un tabelau.

    Merci pour votre aide.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Sipython vous dit que ce n'est pas un floattant, alors ce n'en est pas un ...
    Faites des print juste avant, vous verrez bien ce qu'il en retourne !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Par défaut
    D'accord, je vais regarder ça.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Par défaut
    Z2 est un tableau pour python, pourtant je l'initialise à z2=0. Sauriez-vous pourquoi c'est un tableau ?

Discussions similaires

  1. Runge Kutta d'ordre 4
    Par Physicien dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 08/12/2006, 16h50
  2. probleme de divergence avec runge kutta d'ordre 2 pour un pendule simple
    Par fab13 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 25/11/2006, 20h19
  3. Runge-Kutta à une variable?
    Par PadawanDuDelphi dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 22/11/2006, 09h20
  4. probleme avec runge kutta dimension 4
    Par fab13 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/11/2006, 21h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo