मैं एक आयाम, जहां integrand वेक्टर-मान है में एक संख्यात्मक एकीकरण प्रदर्शन करने के लिए करना चाहते हैं। integrate()
केवल स्केलर इंटीग्रैंड्स को अनुमति देता है, इस प्रकार मुझे इसे कई बार कॉल करने की आवश्यकता होगी। cubature
पैकेज अच्छी तरह से उपयुक्त लगता है, लेकिन ऐसा लगता है कि 1 डी इंटीग्रल के लिए काफी खराब प्रदर्शन करता है। निम्न उदाहरण (अदिश-मान integrand और -1 डी एकीकरण) पर विचार करेंप्रदर्शन एकीकृत
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
एक समान परिशुद्धता के लिए कई और अधिक समारोह के मूल्यांकन का उपयोग किया जा रहा है। दोनों विधियां स्पष्ट रूप से गॉस-क्रोन्रोड क्वाड्रैचर (1 डी केस: 15-पॉइंट गॉसियन क्वाड्रैचर नियम) का उपयोग करती हैं, हालांकि ?integrate
"वाईन का एस्पिलॉन एल्गोरिदम" जोड़ती है। क्या यह बड़े समय के अंतर को समझाएगा?
मैं ऐसे
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
धन्यवाद के रूप में वेक्टर-मान integrands के साथ काम करने के वैकल्पिक तरीके के सुझाव के लिए खुले हूँ।
मुझे यह खेद नहीं है; स्केलर-मूल्यवान इंटीग्रैंड के लिए एक-से-एक तुलना के साथ क्या गलत है? – baptiste
मैंने 'fDim = 2' (अंतिम उदाहरण, 345 मूल्यांकन भी) के साथ परीक्षण किया था, तुलना केवल दो बार 'एकीकृत' कॉल करने का मामला है, 'str (lapply (c (integrand1, integrand2), एकीकृत, -1,1 , rel.tol = सहनशीलता, उपविभाग = एनएमएक्स)) '10 + 1 = 11 मूल्यांकन देता है। मेरा मुद्दा है, हां, 'adaptIntegrate' लक्ष्य बहु-आयामी एकीकरण, और वैकल्पिक रूप से वेक्टर-मूल्यवान इंटीग्रैंड्स का लक्ष्य है, लेकिन एक-आयामी एकीकरण का मामला बार-बार' एकीकृत 'को कॉल करने से बहुत कम कुशल है, लेकिन एक बड़ा मार्जिन (~ 30 बार यहाँ)। – baptiste
क्या आपने यह पैकेज देखा है: http://cran.r-project.org/web/packages/R2Cuba/ –