我想解决以下形式的R中的双积分:
其中:
b0= function(time){0.05*sin(0.1*time)+0.14}
bi=function(time){0.05*sin(0.1*time)+0.12}
这是一个相当复杂的等式,我不确定我是否以正确的方式解决它。
这是我尝试过的:
我把这个等式分成了很小的部分:
wi<-Vectorize(function(n,t,bi,di){di-bi(n+t)},"n")
InnerIntegral = function(tau,t,bi){
0.1*exp(integrate(wi,lower=0,upper=(tau),t=t,bi=bi,di=0.1)$value)
}
Pext<-function(t,bi,Text){
integrate(Vectorize(InnerIntegral,c('tau')),lower=0,upper=Text-t,t=t, bi=bi)$value
}
PrIntegral<-Vectorize(function(t,b0,bi,Text){
b0(t)*(1-Pext(t,bi=bi,Text=Text))
},"t")
#For T=100
T=100
integrate(Vectorize(PrIntegral,'t'),lower=0,upper=T,b0=b0,bi=bi,Text=100)$value
这给了我-27.77913,但我不确定它是否正常。 有经验使用R集成的人可以帮助我吗?也许我用错误的方式解释等式......
谢谢!
答案 0 :(得分:2)
我清理了它,它对我有用。无需传递bi和b0函数。
b0 <- function(time){0.05*sin(0.1*time)+0.14}
bi <- function(time){0.05*sin(0.1*time)+0.12}
wi <- Vectorize(function(n,t,di){di-bi(n+t)},"n")
InnerIntegral <- function(tau,t){
0.1*exp(integrate(wi,lower=0,upper=(tau),t=t,di=0.1)$value)
}
InnerIntegralVec <- Vectorize(InnerIntegral,c('tau'))
Pext <- function(t,Text){
integrate(InnerIntegralVec,lower=0,upper=Text-t,t=t)$value
}
PrIntegral <- function(t,Text) {
b0(t)*(1-Pext(t,Text=Text))
}
PrIntegralVec <- Vectorize(PrIntegral, "t")
#For T=100
T=100
integrate(PrIntegralVec,lower=0,upper=T,Text=100)$value