为什么scipy.integrate.quad返回0而不是正确的积分值?

时间:2018-03-24 03:02:55

标签: python scipy integration quad

我有一个代码,它使用scipy.integrate.quad包作为进程的一部分。这应该产生跟随下图中红线的值(蓝色方块)。一些蓝色方块不遵循趋势,该趋势只能是scipy.integrate.quad过程中的错误的衍生物。有没有人知道为什么quad包可能只对某些响应失败?它可能与浮点运算或其他一些潜在问题有关吗?

注意:我之前在其他功能中看到过这个问题,我确定错误来源是quad包而不是我的其余代码。

Result showingintegration error

1 个答案:

答案 0 :(得分:1)

quad返回接近0的值的一个可能原因是该函数相对于积分间隔的大小进行了明确的本地化,并且算法只是错过了它。一个例子:

from scipy.integrate import quad
import numpy as np
np.around([quad(lambda x: np.exp(-x**2), -100, 100*n)[0] for n in range(1, 10)], 3)

返回零[1.772, 1.772, 1.772, 0., 0., 1.772, 0., 1.772, 0.]),其中零不正确。这里高斯支持在0附近,当积分间隔为[-100,300]或类似时,quad从不对其值接近0进行采样。(对于其他一些区间,它偶然发生。)

补救措施:使用参数points来指示函数的位置。随着

quad(lambda x: np.exp(-x**2), -100, 100*n, points=[-10, 10])

上述代码每n都返回1.772。