关于R中积分的混淆给出错误“积分可能是分歧的”

时间:2016-03-31 17:25:05

标签: r integration

有问题的积分是:

integrand<-function(y){
   exp(-sqrt(2*y + alpha^2)*abs(x))/ (pi^2 * y * ((besselJ(delta*sqrt(2*y), lambda))^2)
   + (besselY(delta*sqrt(2*y), lambda))^2)
}

integral<-function(x){integrate(integrand, lower=0, upper=Inf, subdivisions=20000)$value}

出于某种原因,当我尝试运行它时(特别是对于非常小的x值),我得到错误“积分可能是不同的”。我认为,因为我除以'y',这导致了错误。但是,如果我改变方程式,即

integrand<-function(y){
   (1/y)*(exp(-sqrt(2*y + alpha^2)*abs(x))/ (pi^2 * ((besselJ(delta*sqrt(2*y), lambda))^2)
   + (besselY(delta*sqrt(2*y), lambda))^2))
}

integral<-function(x){integrate(integrand, lower=0, upper=Inf, subdivisions=20000)$value}

除非我弄错了(我很可能),否则这应该仍然是相同的等式。 (因为乘以'1 / y'应该产生与除以'y'相同的结果)。但是,以这种方式运行积分,我没有得到“积分可能是发散的”错误。我很困惑,显然我在这里做了一些非常错误的事情!

编辑:事实上不是是另一个问题的副本。我收到错误的原因是由于缺少一对括号,而不是由于另一个问题的容差。

1 个答案:

答案 0 :(得分:0)

好的,所以我自己解决了所有问题!

贝塞尔函数周围缺少一对括号&#39;加成;该函数应为:

integrand<-function(y){
   exp(-sqrt(2*y + alpha^2)*abs(x))/ (pi^2 * y * (((besselJ(delta*sqrt(2*y), lambda))^2)
   + (besselY(delta*sqrt(2*y), lambda))^2))
}

integral<-function(x){
   integrate(integrand, lower=0, upper=Inf, subdivisions=20000)$value
}