tek boyutlu numaralı bir tümleştirmeyi gerçekleştirmek istiyorum, burada tümleştirmesi vektör değerli'dur. integrate()
sadece skaler integrallere izin verir, bu yüzden birkaç kez çağırmam gerekecek. cubature
paketi çok uygun görünüyor, ancak 1D integralleri için oldukça zayıf bir performans sergiliyor.uyarlamasıEngrasyon ve eşitleme
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
nasılsa, şu örneği (skaler değerli integrali alınan ve 1D entegrasyonu) düşünün, adaptIntegrate
benzer bir hassasiyet için daha birçok fonksiyon değerlendirmeler kullanıyor görünüyor. ?integrate
bir "Wynn's Epsilon algoritması" ekler olsa da, her iki yöntem de Gauss-Kronrod kareleme (1D durum: 15-noktalı Gaussian quadrature kuralı) kullanın. Bu büyük zamanlama farkını açıklar mı?
Böyle
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
teşekkür olarak vektör değerli integraller ile başa alternatif yollardan önerilere açığım.
Üzgünüm; Skaler değerli integral için verdiğim bire bir karşılaştırmayla ilgili sorun nedir? – baptiste
"fDim = 2" ile test yaptım (son örnek, 345 de değerlendirmeler), karşılaştırma sadece "integrate" kelimesini iki kez çağırmaktır, str (gecikme (integral1, integrand2), integral, -1,1 , rel.tol = tolerans, altbölüm = Nmax)) '10 + 1 = 11 değerlendirmesini verir. Benim düşüncem, evet, 'adapIntegrate', çok boyutlu entegrasyonu ve isteğe bağlı olarak vektör değerli integralleri hedefler, ancak tek boyutlu entegrasyon durumu, tekrar tekrar entegre edilmekten çok daha az verimlidir, ancak büyük bir fark (~ 30 kez) İşte). – baptiste
Bu paketi gördünüz mü: http://cran.r-project.org/web/packages/R2Cuba/ –