Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Calcul scientifique
Calcul scientifique Forum d'entraide sur la programmation scientifique et bibliothèques associées (PIL, NumPy, SciPy, ...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/01/2013, 15h13   #1
souchi6
Invité de passage
 
Inscription : 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é....
souchi6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 15h16   #2
souchi6
Invité de passage
 
Inscription : octobre 2009
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 7
Points : 0
Points : 0
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
souchi6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 15h27   #3
souchi6
Invité de passage
 
Inscription : octobre 2009
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 7
Points : 0
Points : 0
j'ai oublié qu'on considérait aussi :
v0=0
x0=1
souchi6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 17h29   #4
plumecoq
Invité de passage
 
Homme Jérôme Plumecoq
Ingénieur développement logiciels
Inscription : 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
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]))
plumecoq est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h56.


 
 
 
 
Partenaires

Hébergement Web