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

Calcul scientifique Python Discussion :

equa diff : float object is not callable?


Sujet :

Calcul scientifique Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 5
    Points
    5
    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 : 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
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Voici une correction effectué par mon professeur qui bizzarement marche alors que je ne vois aucune différence:
    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
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    j'ai oublié qu'on considérait aussi :
    v0=0
    x0=1

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement informatique scientifique
    Inscrit en
    Janvier 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement informatique scientifique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 10
    Points : 21
    Points
    21
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        v[i+1] = v[i] + h*(-delta*v[i]-beta*x[i]-alpha*x[i]**3+gamma*np.cos(omega*t[i]))

Discussions similaires

  1. erreur : 'int' object is not callable
    Par aschreck dans le forum Général Python
    Réponses: 2
    Dernier message: 06/04/2012, 15h36
  2. Réponses: 2
    Dernier message: 01/04/2011, 09h20
  3. object is not callable
    Par rezguiinfo dans le forum Général Python
    Réponses: 6
    Dernier message: 30/01/2011, 13h43
  4. "'int' object is not callable"
    Par dingoth dans le forum Général Python
    Réponses: 2
    Dernier message: 22/12/2010, 17h38
  5. TypeError: 'file' object is not callable
    Par MariemEA dans le forum Général Python
    Réponses: 7
    Dernier message: 09/07/2010, 21h57

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