在 R 中编写多重积分函数
Coding a multiple integral function in R
为了将以下内容转换为函数,我想知道如何根据 R 代码编写以下二重积分?:($\bar{x} = \mu$):
请注意确定这个问题是否与主题相关,但我愿意回答。
也许你应该问一个更笼统的问题,如何 write/computing 积分
使用计算机程序(代码)?至少有两种方法
- 使用数值积分,例如Monte Carlo方法
- 使用符号工具箱分析求解问题并插入数值。
$\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)
假设 pi0
和 pi1
以矢量化方式实现函数 $\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
为了将以下内容转换为函数,我想知道如何根据 R 代码编写以下二重积分?:($\bar{x} = \mu$):
请注意确定这个问题是否与主题相关,但我愿意回答。
也许你应该问一个更笼统的问题,如何 write/computing 积分 使用计算机程序(代码)?至少有两种方法
- 使用数值积分,例如Monte Carlo方法
- 使用符号工具箱分析求解问题并插入数值。
$\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)
假设 pi0
和 pi1
以矢量化方式实现函数 $\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