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

Why does scipy.integrate.quad return 0 instead of the correct value of the integral?

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

注意:我以前在其他函数中见过这个问题,我确定错误的来源是 quad 包,而不是我的代码的其余部分。

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)

returns [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])

上面的代码returns 1.772 for every n.