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

Integration with Scipy giving incorrect results with negative lower bound

我正在尝试使用 python/scipy 计算两个极限之间的积分。

我正在使用在线计算器仔细检查我的结果 (http://www.wolframalpha.com/widgets/view.jsp?id=8c7e046ce6f4d030f0b386ea5c17b16a, http://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处出错了

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

谢谢,

马特

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

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

最后,这些套路选择了合适的区间,通过函数求值,然后进行数值积分,尝试得到积分的值。这适用于有限积分,假设您大致知道您可以使函数评估的步骤有多精细。

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

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

如果您的问题可以分析解决,请尝试或将自己限制在一定范围内。