С целью превращения следующего в функцию мне было интересно, как я могу написать следующий двойной интеграл в терминах R-кодов ?: ($ \ bar {x} = \ mu $):Кодирование целочисленной интегральной функции в R
ответ
Предполагая 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
Примечание уверен, что если этот вопрос по теме, но я открыт для ответа.
Может быть, вы должны задать более общий вопрос, как написать/вычислить интеграл с помощью компьютерной программы (кода)? Там, по крайней мере два способа
- Используя численное интегрирование, такие как методы Монта-Карло
- Использования символических инструментов для решения задач аналитически и плагин численного значения.
Примеры на $ \ int_0^1 х^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)
@parvinkarimi видеть мою редактировать – hxd1011
Но помните мой случай двойной интеграции, так что мне нужна помощь, что, честно говоря, не простые интеграции? – rnorouzian
Добро пожаловать. Не совсем, проверьте редактирование. – epsilone
Используйте 'pi1 = function (x) dcauchy (x, scale = 0.5)'. – epsilone