我在python 2.7(scipy.integrate模块的一部分)中使用正交函数时遇到了一些问题。我想要整合的等式很简单:
x/(d^2) - (x^2)
集成在限制a和b之间。但是,我需要在40个不同的d值进行积分,并且不确定如何传递第二个参数,以便将积分循环到d的值上。任何帮助都将非常感激,并且正交是评估此问题的最佳方式。
答案 0 :(得分: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)
。
答案 1 :(得分: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
答案 2 :(得分: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
您最容易使用它来评估您的数据。