【问题标题】:Parallelize integrate in R在 R 中并行化集成
【发布时间】:2018-10-10 17:35:31
【问题描述】:

我想知道这是否可能以及如何并行化 R 中的积分函数以加快数值积分。

我在这里写一个小例子,以防有人可以帮助我。

b0=function(time){0.05*sin(0.1*time)+0.1}  
d0=0.14  
#Function to integrate
f0<-Vectorize(function(t,d0){b0(t)-d0},"t")

integrate(f0,lower=0,upper=1000,d0=d0)$value

这个小例子很快,但我有更复杂的例子,速度较慢,我想让它们更快。

【问题讨论】:

  • 你能不能分割你正在整合的区域并并行化?
  • 如果您可以创建一个实际矢量化的函数,而不是使用带有 mapply/Vectorize 的循环,您将获得比并行化更好的速度增益。
  • @Roland 但我的函数已经矢量化了。你的意思是,如果我并行化那个向量化函数,我不会获得任何速度??
  • 编译被积函数可能会加快速度。
  • 我认为 RcppNumerical 包的集成速度非常快。

标签: r parallel-processing numerical-integration integrate


【解决方案1】:

@Roland 的上述评论是正确的。但是,你的问题的答案 直接就是:

library(parallel)
options(mc.cores = 2)
b0=function(time){0.05*sin(0.1*time)+0.1}  
d0=0.14  
#Function to integrate
f0<-Vectorize(function(t,d0){b0(t)-d0},"t")

ans <- mclapply(
  list(c(0, 500), c(500, 1000)),
  function(i){
    integrate(f0,lower=i[1],upper=i[2],d0=d0)$value
  }
)

Reduce("+", ans)

【讨论】:

  • 不能保证这会加快速度,因为integrate 使用自适应正交。计算强度取决于被积函数的复杂度,而不是区间的长度。
猜你喜欢
  • 1970-01-01
  • 2017-04-27
  • 2019-06-12
  • 2017-11-22
  • 2020-12-09
  • 2019-09-26
  • 2012-04-13
  • 2023-03-18
相关资源
最近更新 更多