2017-02-06 27 views

ответ

1

Предполагая 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 
+0

Добро пожаловать. Не совсем, проверьте редактирование. – epsilone

+0

Используйте 'pi1 = function (x) dcauchy (x, scale = 0.5)'. – epsilone

0

Примечание уверен, что если этот вопрос по теме, но я открыт для ответа.

Может быть, вы должны задать более общий вопрос, как написать/вычислить интеграл с помощью компьютерной программы (кода)? Там, по крайней мере два способа

  1. Используя численное интегрирование, такие как методы Монта-Карло
  2. Использования символических инструментов для решения задач аналитически и плагин численного значения.

Примеры на $ \ 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) 
+0

@parvinkarimi видеть мою редактировать – hxd1011

+0

Но помните мой случай двойной интеграции, так что мне нужна помощь, что, честно говоря, не простые интеграции? – rnorouzian

 Смежные вопросы

  • Нет связанных вопросов^_^