使用数值积分进行集成

3

我在使用Python 2.7中的quadrature函数(属于scipy.integrate模块)时遇到了一些问题。我尝试要积分的方程很简单:

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

这个积分的范围是从a到b。但是,我需要在40个不同的d值上进行积分,不确定如何传递第二个参数以便循环积分在d值上。非常感谢任何帮助,并且求解这个问题时,是否使用求积法是最好的方式。

3个回答

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

这是您最容易使用来评估数据的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接