求解 R 中的复积分

问题描述 投票:0回答:1

我想求解以下形式的 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 中使用集成经验的人可以帮助我吗?也许我以错误的方式解释了方程......

谢谢!

r math numerical-integration integral equation-solving
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.