在集成普通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的积分函数完全相同的事情,所以这可能只是正交算法的一个已知属性?有谁知道为什么会这样?
答案 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