R中积分的积分
我想在R中解决以下问题: ∫0H[π(t)∫tH A(x)dx]dt 其中π(t)是先验函数,A(x)是下面定义的A函数R中积分的积分,r,integral,R,Integral,我想在R中解决以下问题: ∫0H[π(t)∫tH A(x)dx]dt 其中π(t)是先验函数,A(x)是下面定义的A函数 prior <- function(t) dbeta(t, 1, 24) A <- function(x) dbeta(x, 1, 4) expected_loss <- function(H){ integrand <- function(t) prior(t) * integrate(A, lower = t, upper =
prior <- function(t) dbeta(t, 1, 24)
A <- function(x) dbeta(x, 1, 4)
expected_loss <- function(H){
integrand <- function(t) prior(t) * integrate(A, lower = t, upper = H)$value
loss <- integrate(integrand, lower = 0, upper = H)$value
return(loss)
}
我不确定我做错了什么。在您的
被积函数中,lower=t
没有矢量化,因此对集成的调用没有达到您的预期*。对t
进行矢量化可解决此问题
expected_loss <- function(H){
integrand <- function(t) prior(t) * integrate(A, lower = t, upper = H)$value
vint <- Vectorize(integrand, "t")
loss <- integrate(vint, lower = 0, upper = H)$value
return(loss)
}
expected_loss(.5)
# [1] 0.7946429
expected_loss(1)
# [1] 0.8571429
expected_loss在这种特殊情况下,您不需要Vectorize
,因为dbeta
的积分已经通过pbeta
在R中实现。试试这个:
prior <- function(t) dbeta(t, 1, 24)
#define the integral of the A function instead
Aint <- function(x,H) pbeta(H, 1, 4) - pbeta(x,1,4)
expected_loss <- function(H){
integrand<-function(x) Aint(x,H)*prior(x)
loss <- integrate(integrand, lower = 0, upper = H)$value
return(loss)
}
expected_loss(.5)
#[1] 0.7946429
expected_loss(1)
#[1] 0.8571429
prior
prior <- function(t) dbeta(t, 1, 24)
#define the integral of the A function instead
Aint <- function(x,H) pbeta(H, 1, 4) - pbeta(x,1,4)
expected_loss <- function(H){
integrand<-function(x) Aint(x,H)*prior(x)
loss <- integrate(integrand, lower = 0, upper = H)$value
return(loss)
}
expected_loss(.5)
#[1] 0.7946429
expected_loss(1)
#[1] 0.8571429