Python 带np.inf的scipy中四元积分的极限

Python 带np.inf的scipy中四元积分的极限,python,scipy,Python,Scipy,下面是一个结果示例: 我通过高斯分布(mu=800,sigma=1)与~+-2sigma ppf和从-inf到+inf的相同积分进行积分。出于某种原因,第二次积分的结果为零,但在实践中,它应该更精确 有人能解释一下,为什么会发生这种异常现象,或者我在哪里犯了错误吗 代码: 编辑:顺便说一下,当平均值很小(例如2)时,它工作得很好-两个积分的结果非常接近。这似乎是预期的行为 当积分极限如此之大时,从-inf到inf,quad很难在800左右找到相对较小的凹凸,因此积分结果将为零 当平均值很小时,它

下面是一个结果示例:

我通过高斯分布(mu=800,sigma=1)与~+-2sigma ppf和从
-inf
+inf
的相同积分进行积分。出于某种原因,第二次积分的结果为零,但在实践中,它应该更精确

有人能解释一下,为什么会发生这种异常现象,或者我在哪里犯了错误吗

代码:


编辑:顺便说一下,当平均值很小(例如2)时,它工作得很好-两个积分的结果非常接近。

这似乎是预期的行为

当积分极限如此之大时,从-inf到inf,
quad
很难在800左右找到相对较小的凹凸,因此积分结果将为零


当平均值很小时,它起作用的原因是因为第一次分割
quad
在给定范围的中间进行,即零,因此当平均值很小时,积分将在第一次分割时找到正值。(我不确定,可能是使用了某种梯形积分)。因此,这个问题的解决方案是:或给整数的极限一个实数(使我们的搜索空间小得多),或确保其中一个拆分将在范围内找到正值(例如确保平均值在零附近)。

quad
使用启发式算法,采用自适应积分步骤减少计算时间。在功能平坦的地方,速度更快。因此,在大的全球区间,它可能会错过峰值

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

>>> quad(integrand,0,1000)
(3.8929062783235445e-32, 7.210678067622767e-32)
>>> quad(integrand,0,1000,points=[750])
(799.9999999999993, 2.0260999142842332e-07)
您可以使用
full\u output
关键字查看
quad
调查的结果:

>>>quad(integrand,0,1000,full_output=True)[2]['rlist'].max()
3.8929062783235445e-32
此处
quad
从不选择被积函数值超过1e-31的点,因此它

推断函数处处为空。

我看不出这里有什么问题。你知道第二个积分应该是零,对吗?(你在对称区间上积分一个奇数函数,x乘以PDF)不,它应该是分布的期望值,在他的例子中,它是800。这似乎是集成方法的一个问题。如果你用1替换你的期望值,你会得到正确的结果。它不应该是平均值吗?哦,对了,我忘记了移位。请注意,
在域无限大时不能使用。
>>>quad(integrand,0,1000,full_output=True)[2]['rlist'].max()
3.8929062783235445e-32