与Scipy集成,给出不正确的结果,负下限

时间:2016-10-12 14:36:25

标签: python numpy scipy integration

我试图使用python / scipy计算两个限制之间的积分。

我使用在线计算器来仔细检查我的结果(http://www.wolframalpha.com/widgets/view.jsp?id=8c7e046ce6f4d030f0b386ea5c17b16ahttp://www.integral-calculator.com/),当我设置了某些限制时,我的结果不一致。

使用的代码是:

import scipy as sp
import numpy as np

def integrand(x):
    return np.exp(-0.5*x**2)

def int_test(a,b):
    # a and b are the lower and upper bounds of the integration
    return sp.integrate.quad(integrand,a,b)

将限制(a,b)设置为(-np.inf,1)时,我得到的答案一致(2.10894 ......) 但是,如果我设置(-np.inf,300),我会得到零答案。

进一步调查使用:

for i in range(50):
    print(i,int_test(-np.inf,i))

我可以看到i = 36时结果出错。

我想知道是否有办法避免这种情况?

谢谢,

马特

1 个答案:

答案 0 :(得分:1)

我猜这与无限界限有关。 scipy.integrate.quad是quadpack例程的包装器。

https://people.sc.fsu.edu/~jburkardt/f_src/quadpack/quadpack.html

最后,这些例程选择了合适的区间,并尝试通过函数评估和数值积分得到积分的值。这适用于有限积分,假设你大致知道你可以做出功能评估的步骤。

对于无限积分,它取决于算法选择各个子区间的程度以及计算它们的准确程度。

我的建议:如果您对无限积分的准确值感兴趣,请不要使用数值积分软件AT ALL。

如果您的问题可以通过分析解决,请尝试或限制自己适应某些范围。