2015-09-17 1 views
3

Je reçois le code d'erreur suivant lorsque j'essaie d'évaluer une intégrale définie dans Python.Quelle est la cause de cette erreur (AttributeError: l'objet 'Mul' n'a pas d'attribut 'cos') en Python?

AttributeError       Traceback (most recent call last) 
<ipython-input-7-2be8718c68ec> in <module>() 
     7 x, n = symbols('x n') 
     8 
----> 9 f = (cos(n*x))*(x**2-pi**2)^2 
    10 integrate(f,(x,-n*pi,n*pi)) 
    11 

AttributeError: 'Mul' object has no attribute 'cos' 

J'ai copié mon code d'entrée ci-dessous. Merci pour toute aide.

from pylab import * 
from sympy import * 
from numpy import * 

init_printing(use_unicode=False, wrap_line=False, no_global=True) 

x, n = symbols('x n') 

f = (cos(n*x))*(x**2-pi**2)^2 
integrate(f,(x,-n*pi,n*pi)) 
+3

Vous polluez votre espace de noms avec 'from import module '' –

Répondre

9

Votre problème est avec choc d'espace de noms, ici

from sympy import * 
from numpy import * 

Depuis deux numpy et sympy et ont leur propre définition de cos. L'erreur vous indique que l'objet Mul (qui est n*x) n'a pas une méthode de cosinus, puisque l'interpréteur est maintenant confondu entre les méthodes sympy et numpy. Pour ce faire, au lieu

import pylab as pl 
import numpy as np 
import sympy as sp 

x, n = sp.symbols('x n') 
f = (sp.cos(n*x))*(x**2-sp.pi**2)**2 
sp.integrate(f,(x,-n*sp.pi,n*sp.pi)) 

Notez également que j'ai changé ^ à ** comme ^ est l'opérateur Not dans sympy. Ici, je suppose que vous avez besoin du symbolique Pi de sympy.core.numbers.Pi et non le numéro de numpy. Si vous voulez ce dernier, alors faites-le

f = (sp.cos(n*x))*(x**2-np.pi**2)**2 
sp.integrate(f,(x,-n*np.pi,n*np.pi))