python – 使用np.inf在scipy中进行四重集成的限制

这里有一个结果示例:

我通过高斯分布(mu = 800,sigma = 1)与〜-2sigma ppf和从-inf到inf的相同积分进行积分.由于某种原因,第二个积分导致零,但在实践中它应该更准确.

有人可以解释,为什么会发生这样的异常现象或者我犯了什么错误?

码:

from scipy.integrate import quad
import numpy as np
from scipy.stats import norm

def integrand(x):
    return x*norm.pdf(x, 800, 1)
print quad(integrand, norm.ppf(0.05, 800,1), norm.ppf(0.95, 800,1))
print quad(integrand, -np.inf, np.inf)

(719.9999999999894, 5.913323331834147e-11)
(0.0, 0.0) 

编辑:顺便说一句,当平均值很小(例如2)时,它工作正常 – 积分结果非常接近.

最佳答案 四元使用启发式算法,使用适应性集成步骤来减少时间计算.功能是平坦的,它会更快.所以在大的全球区间,它可能会错过高峰.

您可以通过建议“兴趣点”来帮助他找到有困难的地区:

>>> quad(integrand,0,1000)
(3.8929062783235445e-32, 7.210678067622767e-32)
>>> quad(integrand,0,1000,points=[750])
(799.9999999999993, 2.0260999142842332e-07)

您可以使用full_output关键字查看quad调查的结果:

>>>quad(integrand,0,1000,full_output=True)[2]['rlist'].max()
3.8929062783235445e-32

这里quad从不选择被积函数值超过1e-31的点,所以它
推断该函数无处不在.

点赞