Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

calcul d'intégrale

1 réponse
Avatar
jeremie fouche
Bonsoir tout le monde

Pour un calcul d'intégrale, j'utilise l'approximation suivante, qui me
va tres bien :

def integral(func, a, b, dx = 0.001) :
return sum(map(lambda x: dx * x, func(pylab.arange(a, b, dx))))

ca fonctionne bien pour les fonction simple du style :
integral(pylab.sin, 0, 1)

mais je galere un peu si la fonction est plus complexe, et possede des
arguments supplémentaires (ex : calcul d'une modulation AM)

La formule que j'utilise pour moduler le signal y :

A.cos(2.pi.integral(Fp+Fd.y(t), a, b, dt))

le code que j'ai tenté est le suivant :

def modulateAm(Fp, Fd, y) :
def AmFct(x) :
return Fp + Fd*y[x)]

return pylab.array( [ math.cos(2 * math.pi * integral(AmFct, 0, t))
for t in range(len(y)) ] )

Ceci ne fonctionne pas, car la variable x est de type tableau de reel
donc y[x] n'existe pas ! Je ne vois pas comment m'en sortir en restant
avec ça. Je dois faire une connerie quelqpart, mais je ne vois pas ou ?
Des idées sont la bienvenue.
Merci
--
Jérémie

1 réponse

Avatar
Laurent Claessens
> Ceci ne fonctionne pas, car la variable x est de type tableau de reel
donc y[x] n'existe pas ! Je ne vois pas comment m'en sortir en restant
avec �a. Je dois faire une connerie quelqpart, mais je ne vois pa s ou ?
Des id�es sont la bienvenue.




Ça ne répond sans doute (surement) pas à ta préoccupati on, mais pour
faire des calculs un tant soit peu complexes en python, j'utilise le
programme externe maxima.

J'ai donc tapé la classe suivante que j'appelle pour résoudre des
équations, et trouver des extremas de fonctions.

class maxima(object):
def calcul(self,ligne):
sortie = commands.getoutput( "maxima --batch-string=
"display2d:false;n float("+ligne+");""+"|grep o2" )
return sortie
def solve(self,eq,vars):
return self.calcul( " solve(["+eq+"],["+vars+"]) " )
def extrema(self,f):
sortie = self.solve("diff("+f.fx
+",x)=0","x").replace(",","").replace("]","")
a = sortie.split("x =")
del a[0]
return a

La méthode maxima.calcul prend en entrée "ligne" qui est donnà ©e dans
la syntaxe maxima et donne en sortie la réponse. La méthode
maxima.solve prends eq et vars comme arguments, compose l'entrée
maxima qui corresponds à résoudre eq pour les variables vars, et la
méthode extrema prends une fonction f et sort ses extremas via un
maxima.solve pour l'annulation de la dérivée de la fonction.

Ça doit prendre envion deux secondes de coder une méthode qui pre nd
une fonction et deux bornes en entrée et donne en sortie l'intégr ale
définie entre les bornes.

...évidement ça rend le programme maxima-lement non portable :(

Merci


pour ce que ça t'aide ... ;)

bonne aprème
Laurent