【问题标题】:Confusion regarding an integral in R giving error “The integral is probably divergent” [duplicate]关于 R 中的积分的混淆给出错误“积分可能是发散的”[重复]
【发布时间】:2016-07-20 06:54: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}

由于某种原因,当我尝试运行此程序时(特别是对于非常小的 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 integration


    【解决方案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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多