2015-04-22 31 views
0

我写的集成代码给出了错误的结果。我得到c_0,c_1,... c_4为零!我究竟做错了什么?我在Mac上只使用0.7.6。python集成

from numpy import * 
from matplotlib.pyplot import * 
from sympy import * 
x = Symbol('x') 
f = 1.0*sin(np.pi * x) 
phi_0 = 1.0 
phi_1 = 1.0*x 
phi_2 = 1./2*(3*x**2-1) 
phi_3 = 1./2*(5*x**3-3*x) 
phi_4 = 1./8*(35*x**4-30*x**2+3) 
c_0 = integrate(f*phi_0, (x, -1.0, 1.0)) 
c_1 = integrate(f*phi_1, (x, -1.0, 1.0)) 
c_2 = integrate(f*phi_2, (x, -1.0, 1.0)) 
c_3 = integrate(f*phi_3, (x, -1.0, 1.0)) 
c_4 = integrate(f*phi_4, (x, -1.0, 1.0)) 
print c_0 
print c_1 
print c_2 
print c_3 
print c_4 

回答

1

除了需要将numpy导入为np以外,我在最新版本(0.7.6)中看不到任何问题。有些值为零(如预期,因为对称性考虑),但其他值不是:

>>> print c_0 
0 
>>> print c_1 
0.636619772367581 
>>> print c_2 
0 
>>> print c_3 
-0.330926260628403 
>>> print c_4 
0 
+0

我得到所有@smichr的零。 – MAS

+1

对我来说,>>> sympy .__ version__ - >'0.7.6-git'。你得到了什么? – smichr

+0

另外,请检查您的np.pi的值。它有可能被设置为0,这也会使你的'f'为零。 – smichr

1

我同意smichr。只要你的进口很好,一切似乎都很好。您也可以使用scipy,但这取决于您的偏好和需求。

from scipy.integrate import quad 

quad(lambda x: x**2, 0, 1) 
+0

可以在调用quad之前定义x ** 2吗? – MAS

+1

是的,这不是问题。例如,假设f(x)被定义为x ** 2,那么可以说quad(f,-1,1),它应该为你整合 – dparadis28

+0

如何定义f。在将x定义为符号变量之前,然后定义f。现在我应该使用什么?拉姆达? @ dparadis28 – MAS