gpt4 book ai didi

r - AdaptIntegrate 与集成的性能

转载 作者:行者123 更新时间:2023-12-04 15:47:33 24 4
gpt4 key购买 nike

我想在 中执行数值积分一维 ,其中 被积函数是向量值 . integrate()只允许标量被积函数,因此我需要多次调用它。 cubature package 似乎很合适,但对于一维积分似乎表现很差。考虑以下示例(标量值被积函数和一维积分),

library(cubature)
integrand <- function(x, a=0.01) exp(-x^2/a^2)*cos(x)
Nmax <- 1e3
tolerance <- 1e-4

# using cubature's adaptIntegrate
time1 <- system.time(replicate(1e3, {
a <<- adaptIntegrate(integrand, -1, 1, tol=tolerance, fDim=1, maxEval=Nmax)
}) )

# using integrate
time2 <- system.time(replicate(1e3, {
b <<- integrate(integrand, -1, 1, rel.tol=tolerance, subdivisions=Nmax)
}) )

time1
user system elapsed
2.398 0.004 2.403
time2
user system elapsed
0.204 0.004 0.208

a$integral
> [1] 0.0177241
b$value
> [1] 0.0177241

a$functionEvaluations
> [1] 345
b$subdivisions
> [1] 10

不知何故, adaptIntegrate似乎正在使用更多的函数评估来获得类似的精度。两种方法显然都使用高斯-克朗罗德正交(一维情况:15 点高斯正交规则),尽管 ?integrate添加了“Wynn 的 Epsilon 算法”。这能解释大的时间差异吗?

我愿意接受有关处理向量值被积函数的替代方法的建议,例如
integrand <- function(x, a = 0.01) c(exp(-x^2/a^2), cos(x))
adaptIntegrate(integrand, -1, 1, tol=tolerance, fDim=2, maxEval=Nmax)
$integral
[1] 0.01772454 1.68294197

$error
[1] 2.034608e-08 1.868441e-14

$functionEvaluations
[1] 345

谢谢。

最佳答案

CRAN 中还有 R2Cuba 包,它实现了几种多维集成算法:

我尝试用您的示例函数对此进行测试,在如此简单的情况下,我无法让所有算法都正常工作(尽管我并没有非常努力地尝试),而且我确实开始工作的方法很少比 adaptIntegrate 慢得多使用默认设置,但也许在您真正的应用程序中,这个包可能值得一试。

关于r - AdaptIntegrate 与集成的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7924818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com