2015-09-17 6 views
3

Я получаю следующий код ошибки при попытке оценить определенный интеграл в Python.Что вызывает эту ошибку (объект AttributeError: 'Mul' не имеет атрибута 'cos') в 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' 

Я скопировал свой код ввода ниже. Спасибо за любую помощь.

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

Вы загрязняете свое пространство имен 'from module import *' –

ответ

9

Ваша проблема с пространством имен столкновения, здесь

from sympy import * 
from numpy import * 

numpy Так как и и sympy имеют свое собственное определение cos. Ошибка сообщает вам, что объект Mul (который равен n*x) не имеет косинусного метода, поскольку интерпретатор теперь запутан между методами sympy и numpy. Сделайте это вместо того, чтобы

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)) 

отметить также, что я изменил ^ к **, как ^ является оператором Not в sympy. Здесь я предполагаю, что вам нужен символический Pi от sympy.core.numbers.Pi, а не цифровой от numpy. Если вы хотите последний, то сделайте это

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