gpt4 book ai didi

python - scipy.integrate.quad 在大范围内给出错误的结果

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:54 25 4
gpt4 key购买 nike

我正在尝试对两个“半”正态分布的总和进行积分。 scipy.integrate.quad 在我尝试在小范围内积分时工作正常,但在我对大范围积分时返回 0。这是代码:

mu1 = 0
mu2 = 0
std1 = 1
std2 = 1

def integral_fun(x):
nor1 = 0.5 * ((1 / (np.sqrt(2 * np.pi) * std1)) * (np.e ** ((-(x-mu1) ** 2) / (2 * std1 **2))))
nor2 = 0.5 * ((1 / (np.sqrt(2 * np.pi) * std2)) * (np.e ** ((-(x-mu2) ** 2) / (2 * std2 **2))))
return nor1 + nor2


integrate.quad(integral_fun, -5, 5)
Out[54]: (0.9999994266968564, 8.668320228277793e-10)

integrate.quad(integral_fun, -10, 10)
Out[55]: (1.0000000000000002, 8.671029607900576e-10)

integrate.quad(integral_fun, -100000, 100000)
Out[56]: (0.0, 0.0)

为什么会这样?

最佳答案

这里的原因是你的函数只在积分区域的一个非常小的区域出现非常强烈的峰值,并且在其他地方实际上为零,quad 永远找不到这个峰值,因此只能看到被积函数零。

由于在这种情况下您知道峰值在哪里,因此拆分积分的限制以便您分别考虑峰值周围的区域是合理的。

要做到这一点,您可以使用 points 参数来强制 quad 单独考虑峰值。

In [3]: integrate.quad(integral_fun, -100000, 100000, points=[-10,10])
Out[3]: (1.0000000000000002, 8.671029607900576e-10)

关于python - scipy.integrate.quad 在大范围内给出错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30913664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com