0

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

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

结果显示积分错误

4

1 回答 1

3

返回接近 0 的值的一个可能原因quad是该函数相对于积分区间的大小非常局部化,而算法只是错过了它。一个例子:

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。

于 2018-03-24T03:11:22.860 回答