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

发布于 2017-02-07 18:25:03
假设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发布于 2017-02-07 02:17:55
请注意,如果这个问题是关于主题,但我是开放的回答。
也许你应该问一个更一般的问题,如何用计算机程序(代码)来写/计算积分?至少有两种方法
关于$\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)https://stackoverflow.com/questions/42095957
复制相似问题