2012-02-22 79 views
3

我一直在python 2.7(scipy.integrate模块的一部分)使用正交函数有几个问题。我试图整合的等式很简单:积分使用正交

x/(d^2) - (x^2) 

积分在限制a和b之间。但是,我需要在40个不同的d值处进行积分,我不确定如何通过第二个参数来循环d值的积分。任何帮助将是非常感谢,并正交评估这个问题的最佳方式。

回答

3
In [9]: from scipy.integrate import quad 

In [10]: a = 0 

In [11]: b = 1 

In [12]: [quad(lambda x, d: x/(d**2)-x**2, a, b, args=d) for d in range(2, 5)] 
Out[12]: 
[(-0.20833333333333334, 2.3717550132075781e-15), 
(-0.27777777777777773, 3.0886887822595405e-15), 
(-0.30208333333333337, 3.3546344203581545e-15)] 

变化所需的for d in range(2, 5)作为访问的结果。

2
from numpy import arange 
from scipy.integrate import quad 
beg = 0. 
end = 4. 
res = [] 
for d in arange(1., 40.): 
    res.append(quad(lambda x: x/(d**2.)-(x**2.), beg, end)) 

然后,您可以

print res[0] 

甚至

print res 
0

如果您想精确符号集成,则需要转至SymPy。尝试

import sympy 

x = sympy.Symbol('x') 
a = sympy.Symbol('a') 
b = sympy.Symbol('b') 
d = sympy.Symbol('d') 

res = sympy.integrate(x/(d**2 - x**2), (x, a, b)) 
print(res) 

这将返回

log(a**2 - d**2)/2 - log(b**2 - d**2)/2 

,你可以很容易地用它来评估您的数据。