在 R 中编写多重积分函数

Coding a multiple integral function in R

为了将以下内容转换为函数,我想知道如何根据 R 代码编写以下二重积分?:($\bar{x} = \mu$):

请注意确定这个问题是否与主题相关,但我愿意回答。

也许你应该问一个更笼统的问题,如何 write/computing 积分 使用计算机程序(代码)?至少有两种方法

  1. 使用数值积分,例如Monte Carlo方法
  2. 使用符号工具箱分析求解问题并插入数值。

$\int_0^1 x^2$

上的例子
f<-function(x){
  x^2
}
curve(f,0,1)

# method 1
integrate(f,lower=0,upper = 1)

# method 2
library(Ryacas)
x <- Sym("x")
f <- function(x) {
  x^2
}
f2=yacas(yacas(Integrate(f(x), x)))
f2

x <- 1
Eval(f2)

假设 pi0pi1 以矢量化方式实现函数 $\pi_0$ 和 $\pi_1$,一个可能的解决方案是:

integral <- function(n, mu, s, pi0, pi1) {

  C <- (2 * pi)^(-n/2) 
  C * integrate(f = function(sigmavec) sapply(sigmavec, function(sigma) {
    integrate(f = function(delta) {

      exp(-n/2 * ((mu / sigma - delta)^2 + (s / sigma)^2)) * pi1(delta)

    }, lower = -Inf, upper = Inf)$value

  }) * pi0(sigmavec) / (sigmavec^n), lower = 0, upper = Inf)$value

}

# Tests
integral(n = 1, mu = 0, s = 1, pi0 = dnorm, pi1 = dnorm)
# [1] 0.0473819
integral(n = 1, mu = 0, s = 1, pi0 = function(sigma) 1/sigma, pi1 = dcauchy)
# [1] 0.2615783