Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité de passage
    Inscrit en
    octobre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 7
    Points : 0
    Points
    0

    Par défaut equa diff : float object is not callable?

    Bonjour à tous je me permets une seconde fois de demander de l'aide en tant que débutant.
    Je cherche à tracer un portrait de phase (x(t),v(t)) d'une équation différentielle.
    A titre d'information, pour ceci, j'utilise la méthode d'Euler semi-implicite mais ce n'est pas de là que vient le problème.
    Lorsque je teste mon programme et que j'utilise le plot un message d'erreur apparait "float object is not callable" et je ne comprend pas vraiment ce que cela veut dire.
    Voici mon programme:
    Code :
    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
    delta=input('valeur de delta : ')
    beta=input('valeur de beta : ')
    alpha=input('valeur de alpha : ')
    gamma=input('valeur de gamma : ')
    omega=input('valeur de omega : ')
    v0=input('valeur vitesse initiale : ')
    x0=input('valeur position initiale : ')
     
    T=input('valeur duree de simulation : ')
    h=input('valeur du pas de temps : ')
    import numpy as np
    import pylab as pl
    n=(int)(T/h)+1
    x=np.zeros(n)
    v=np.zeros(n)
    t=np.zeros(n)
    x[0]=x0
    v[0]=v0
    t[0]=0
    for i in range (1,n-1):
        v[i]=v[i-1] + h(-delta*v[i-1]-beta*x[i-1]-alpha*x[i-1]**3+gamma*np.cos(omega*t*(i-1)*h))
        x[i]=x[i-1] + h*v[i]
        t[i]=t[i] + h
    pl.figure(1)    
    pl.plot(t,x)
    pl.figure(2)
    pl.plot(x,v)
    pl.show()
    J'ai testé le programme pour alpha=0;beta=1;gamma=0;omega=0.2;delta=0;h=0.1 et T=65.
    Merci pour votre aide.
    Ne manquez pas de me faire remarquer si j'ai oublié de dire des choses ou si je me suis mal exprimé....

  2. #2
    Invité de passage
    Inscrit en
    octobre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Voici une correction effectué par mon professeur qui bizzarement marche alors que je ne vois aucune différence:
    Code :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    import numpy as np
     
    delta = input("Entrer la valeur de delta : ")
    beta  = input("Entrer la valeur de beta  : ")
    alpha = input("Entrer la valeur de alpha : ")
    gamma = input("Entrer la valeur de gamma : ")
    omega = input("Entrer la valeur de omega : ")
     
    print "Echelles de temps : "
    if ( delta > 0 ) :    #le coefficient devant dx/dt doit etre positif
        print "      amortissement = ",1./delta  #coefficient devant dx/dt = amortissement
     
    print "      harmonique = ",2*np.pi/np.sqrt(beta) #je pense qu 'on peut aussi dire if beta>0 pour la racine et coeff devant le x=harmonique ou pulsation propre
    if ( gamma > 0 ) :    #le coefficient devant le forcage doit etre positif
        print "      forcage = ",2*np.pi/omega    #coefficient dans le cos=forcage
     
    x0 = input("Entrer la valeur initiale de la position : ")
    v0 = input("Entrer la valeur initiale de la vitesse  : ")
     
    T = input("Entrer le temps de simulation : ")
    h = input("Entrer le pas de simulation   : ")
     
    N = (int)(T/h)+1
     
    t = np.zeros(N)
    x = np.zeros(N)
    v = np.zeros(N)
     
    t[0] = 0
    x[0] = x0
    v[0] = v0
    for i in range(0,N-1) :
        # explicite sur la vitesse
        v[i+1] = v[i] + h*(-delta*v[i]-beta*x[i]-alpha*x[i]**3+gamma*np.cos(omega*t[i]))
        # implicite sur la position
        x[i+1] = x[i] + h*v[i+1]
     
        # actualisation du temps
        t[i+1] = t[i] + h

  3. #3
    Invité de passage
    Inscrit en
    octobre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    j'ai oublié qu'on considérait aussi :
    v0=0
    x0=1

  4. #4
    Invité de passage
    Homme Profil pro Jérôme Plumecoq
    Ingénieur développement logiciels
    Inscrit en
    janvier 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Nom : Homme Jérôme Plumecoq
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : janvier 2013
    Messages : 1
    Points : 1
    Points
    1

    Par défaut

    bonjour,

    en fait à la ligne de calcul de la vitesse tu avais deux erreurs :
    1. il manquait un "*" avant la parenthèse
    2. tu avais mis "t*(i-1)" au lieu de "t[i-1]"

    Citation Envoyé par souchi6 Voir le message
    Voici une correction effectué par mon professeur qui bizzarement marche alors que je ne vois aucune différence:


    Code :
    1
    2
     
        v[i+1] = v[i] + h*(-delta*v[i]-beta*x[i]-alpha*x[i]**3+gamma*np.cos(omega*t[i]))

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •