关于 R 中积分的混乱给出错误“积分可能发散”[重复]

问题描述 投票:0回答:1

所讨论的积分是:

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”相同的结果)。但是,以这种方式运行积分,我没有收到“积分可能发散”错误。我很困惑,显然我在这里做了一些非常错误的事情!

编辑:这实际上是不是另一个问题的重复。我收到错误的原因是由于缺少一对括号,而不是由于其他问题的容差。

r numerical-integration
1个回答
0
投票

好吧,所以我自己解决了!

贝塞尔函数的加法周围缺少一对括号;该函数应为:

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
}
© www.soinside.com 2019 - 2024. All rights reserved.