使用Gauss-Laguerre积分逼近R中的积分

时间:2018-05-15 02:18:46

标签: r math optimization integral

我使用高斯 - 拉盖尔积分来近似下面的积分

First formula

我在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.我获得了不同的公式但是相同的积分

Second formula

以同样的方式,我使用了以下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

这是我的完整示例

Integration and false convergence of optimization in R

0 个答案:

没有答案