我使用高斯 - 拉盖尔积分来近似下面的积分
我在R
中写了这个函数int.gl<-function(x)
{
x^(-0.2)/(x+100)*exp(-100/x)
}
首先,我使用integrate()
函数来获取“true”值,我将对Wolfram Alpha进行仔细检查
integrate(int.gl, lower = 0, upper = Inf)$value
[1] 1.627777
然后,我使用了glaguerre.quadrature()
函数
rule<-glaguerre.quadrature.rules(64, alpha = 0, normalized = F)[[64]]
glaguerre.quadrature(int.gl, lower = 0, upper = Inf, rule = rule, weighted = F)
[1] 0.03610346
显然,结果远离真正的价值。那时,我以为我必须将此函数转换为包含e ^( - x)项。所以,让X = 1 / Y.我获得了不同的公式但是相同的积分
以同样的方式,我使用了以下R代码
int.gl2<-function(x)
{
x^(-0.8)/(1+100*x)*exp(-100*x)
}
integrate(int.gl2, lower = 0, upper = Inf)$value
[1] 1.627777
glaguerre.quadrature(int.gl2, lower = 0, upper = Inf, rule = rule, weighted = F)
[1] 0.03937068
嗯,有两个不同的值。 Gauss-Laguerre积分在找到这个积分时遇到了麻烦吗?还有其他高斯型正交可以帮助找到这个积分吗?
注意:我必须使用高斯型求积法,因为我试图找到一些定制分布的参数的MLE。为简单起见,我只修复了这些参数(这些常量在积分中)。但是,integrate()
函数似乎不如glaguerre.quadrature()
函数“强大”。 (integrate()
在优化对数似然时返回差异错误。)
编辑1
汉斯说。 W的评论,我通过以下示例检查glaguerre.quadrature
的使用情况。假设我们想找到以下积分
int.gl3<-function(x)
{
((x+100)/(x+200))^0.2*exp(-5*x)
}
glaguerre.quadrature(int.gl3, lower = 0, upper = Inf, rule = rule, weighted = F)
[1] 0.1741448
integrate(int.gl3, lower = 0, upper = Inf)$value
[1] 0.1741448
似乎glaguerre.quadrature
的使用是正确的。
现在让我们检查一下转型。我通过让100Y = X来变换这个积分,使得它包括exp(-x)。
int.gl4<-function(x)
{
0.01^0.2*x^(-0.8)/(1+x)*exp(-x)
}
integrate(int.gl4, lower = 0, upper = Inf)$value
[1] 1.627777
glaguerre.quadrature(int.gl4, lower = 0, upper = Inf, rule = rule, weighted = F)
[1] 0.9621667
结果更接近真实值但不完全相等。
编辑2
这是我的完整示例