scipy中正态均值的数值积分

时间:2014-10-02 20:18:20

标签: python r numpy scipy numerical-integration

在集成普通pdf时,我从scipy integrate.quad函数得到了一些奇怪的输出。这是我正在尝试使用的代码:

inpdf = lambda c: norm.pdf(50, loc=c, scale = 1)
result = integrate.quad(inpdf, -np.inf, np.inf)
print result

返回(3.281718223506531e-99,0.0)这显然是错误的。 当我将x值更改为0时,在下面的代码段中,我得到了适当的输出:

inpdf = lambda c: norm.pdf(0, loc=c, scale = 1)
result = integrate.quad(inpdf, -np.inf, np.inf)
print result

返回(0.9999999999999998,1.0178191320905743e-08) 所以非常接近1,这应该是什么。使用R的积分函数完全相同的事情,所以这可能只是正交算法的一个已知属性?有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:5)

至少在R中,可能在scipy这个问题相当简单。

你要求程序做的是在整个实线上集成一个函数。正交算法试图找到函数非零的位置,在普通pdf的情况下,无处不在,但很难找到重要的部分。

在R的情况下,积分函数在多个点处进行评估,默认情况下为100,并且很可能它们不会在您的函数相当大的小间隔内发生。相反,你试过像

这样的东西
> integrate(dnorm,lower=45,upper=55,mean=50)
0.9999994 with absolute error < 8.7e-10

你得到了正确的结果或足够接近。如果你向远处移动,正交算法会再次失败

> integrate(dnorm,lower=-1000,upper=1000,mean=50)
0 with absolute error < 0