【问题标题】:Solving complex integrals in R在 R 中求解复积分
【发布时间】:2018-02-12 16:09:55
【问题描述】:

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

谢谢!

【问题讨论】:

  • 在你的最后一行代码中,你 Vectorize(PrIntegral,'t') 已经被定义为 t 向量化。通过该更改,代码为我返回 -27.77913
  • 我统计了三个不同的积分变量:t、tau 和 n
  • 我会尝试将这些提供给 Wolfram Alpha,看看它可以以封闭的形式为您提供什么。这值得一试。这里有三个积分。从内在开始,然后走出去。
  • 实际上我的代码给出了与@RomanZenka 相同的结果,-27.77913,但我不确定我是否做得很好,或者我必须做一些更复杂的事情!非常感谢您的回答!

标签: r math integral equation-solving integrate


【解决方案1】:

我清理了这个,它对我有用。无需传递 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

【讨论】:

    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 2017-03-13
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多