【发布时间】:2019-05-15 09:27:08
【问题描述】:
我想在一个非常大的区间内积分一个高斯函数。我选择了spicy.integrate.quad 函数进行集成。该功能似乎仅在我选择足够小的间隔时才起作用。当我使用下面的代码时,
from scipy.integrate import quad
from math import pi, exp, sqrt
def func(x, mean, sigma):
return 1/(sqrt(2*pi)*sigma) * exp(-1/2*((x-mean)/sigma)**2)
print(quad(func, 0, 1e+31, args=(1e+29, 1e+28))[0]) # case 1
print(quad(func, 0, 1e+32, args=(1e+29, 1e+28))[0]) # case 2
print(quad(func, 0, 1e+33, args=(1e+29, 1e+28))[0]) # case 3
print(quad(func, 1e+25, 1e+33, args=(1e+29, 1e+28))[0]) # case 4
然后打印以下内容。
1.0
1.0000000000000004
0.0
0.0
为了获得合理的结果,我不得不尝试多次更改积分的下限/上限,并凭经验将其确定为 [0, 1e+32]。这对我来说似乎很冒险,因为当高斯函数的均值和西格玛发生变化时,我总是不得不尝试不同的界限。
有没有一种明确的方法可以将函数从 0 集成到 1e+50 而不用担心边界?如果不是,您从一开始就期望哪些边界会给出非零值?
【问题讨论】: