我有一个代码,它使用 scipy.integrate.quad 包作为流程的一部分。这应该会产生遵循下图中红线的值(蓝色方块)。一些蓝色方块不跟随趋势,这只能是 scipy.integrate.quad 过程中误差的导数。有谁知道为什么 quad 包可能仅对某些响应失败?它可能与浮点运算或其他一些潜在问题有关吗?
注意:我之前在其他函数中看到过这个问题,我确定错误的来源是 quad 包,而不是我的代码的其余部分。
我有一个代码,它使用 scipy.integrate.quad 包作为流程的一部分。这应该会产生遵循下图中红线的值(蓝色方块)。一些蓝色方块不跟随趋势,这只能是 scipy.integrate.quad 过程中误差的导数。有谁知道为什么 quad 包可能仅对某些响应失败?它可能与浮点运算或其他一些潜在问题有关吗?
注意:我之前在其他函数中看到过这个问题,我确定错误的来源是 quad 包,而不是我的代码的其余部分。
返回接近 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。