scipy中正态均值的数值积分

dav*_*ern 2 python numpy r 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
Run Code Online (Sandbox Code Playgroud)

哪个返回(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
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*sic 5

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

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

在R的情况下,积分函数在多个点处进行评估,默认情况下为100,并且很可能它们不会在函数相当大的小间隔内发生.如果相反你尝试了类似的东西

> integrate(dnorm,lower=45,upper=55,mean=50)
0.9999994 with absolute error < 8.7e-10
Run Code Online (Sandbox Code Playgroud)

你得到了正确的结果或足够近.如果您向远处移动,则正交算法将再次失败

> integrate(dnorm,lower=-1000,upper=1000,mean=50)
0 with absolute error < 0
Run Code Online (Sandbox Code Playgroud)