【问题标题】:R: double integral with dependenciesR:具有依赖性的双积分
【发布时间】:2022-11-18 02:51:00
【问题描述】:

我的目标是计算 R 中的以下二重积分。

看了之前的解决方案,比如double integral in R。按照solution by G5W,我想出了代码

inner_func <- function(x) { 
  alpha=23
  beta=14
  return(x^(alpha-1)*(1-t-x)^(beta-1))
}

innerintegral <- Vectorize(
  function(t) {
    integrate(inner_func,0,1-t)$value
  }
)

integrate(innerintegral,0,1)

这是行不通的。我认为因为内部函数本身取决于限制,所以我没有得到任何解决方案。

我还查看了solution by MrFlick 并运行了以下代码,它确实给了我一个输出。

fun0 <-  function(x,t){
  alpha <- 10
  beta <- 10
  return(x^(alpha-1)*(1-t-x)^(beta-1))
}

  integrate(function(t) { 
    sapply(t, function(t) {
      integrate(function(x) fun0(x,t), 0, 1-t)$value
    })
  }, 0, 1)$value

[1] 5.412544e-08

我不确定这是否是正确的方法,甚至不确定解决方案是否正确。请让我知道这是否是正确的程序以及解决方案是否正确。

【问题讨论】:

    标签: r double integral


    【解决方案1】:

    @MrFlick 的方法是正确的。我发现与单纯立方体包裹:

    library(SimplicialCubature)
    
    f <- function(xt) {
      x <- xt[1]; t <- xt[2]
      alpha <- 10
      beta  <- 10
      x^(alpha-1) * (1-t-x)^(beta-1)
    }
    
    # simplex
    S <- cbind(c(0, 0), c(1, 0), c(0, 1))
    
    adaptIntegrateSimplex(f, S)
    # $integral
    # [1] 5.412543e-08
    # 
    # $estAbsError
    # [1] 5.071444e-13
    

    我认为简单方法更好,因为您使用的方法忽略了内部积分的错误。

    奖金

    这是没有积分的积分值:

    > beta(10,10) / 20
    [1] 5.412544e-08
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      相关资源
      最近更新 更多