бейімделу интегралдау және т.б.

Мен интеграл векторлық-бағаланған бір өлшемде сандық интеграцияны орындағым келеді. integrate() тек скаляр интегралдарға мүмкіндік береді, сондықтан оны бірнеше рет атаған болар едім. cubature бумасы жақсы сәйкес келеді, бірақ 1D интегралдар үшін өте нашар көрінеді. Төмендегі мысалды қарастырайық (скалярлық интегралдау және 1D интеграциясы),

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 дәл осындай дәлдік үшін көптеген функционалдық бағалауды қолданған сияқты. Екі әдіс де Gauss-Kronrod квадратурасын пайдаланады (1D жағдайы: 15 нүктелі Гаусс квадратуралық ереже), бірақ ? Integrate «Wynn's 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

Рахмет.

6
Мен оны кешірмеймін; бір-бірімен салыстыра отырып, скалярға тән интеграл үшін қандай қателік туындайды?
қосылды автор baptiste, көзі
Мен fDim = 2 (соңғы мысал, 345 бағалау) -пен сыналдым, салыстыру тек integrate деп екі рет қоңырау шалу болып табылады, str (lapply (c ( интеграл1, интеграл2), интегралдау, -1,1, rel.tol = төзімділік, бөлімдер = Nmax)) 10 + 1 = 11 бағалауды береді. adaptIntegrate - көпөлшемді интеграцияны және векторлық бағаланатын интегралдарды қажет етпейді, бірақ бір өлшемді интеграция жағдайында integrate бірнеше рет, бірақ үлкен маржа (~ 30 рет).
қосылды автор baptiste, көзі
Мен көрсеткішке алғыс білдірмедім.
қосылды автор baptiste, көзі
@ Хеммо оны жауапқа айналдырып, қоқысқа кетер алдында нағыз марапатқа ие болуға тырысады?
қосылды автор baptiste, көзі
Осы пакетті көрдіңіз бе: cran.r-project.org/web/packages/R2Cuba
қосылды автор Jouni Helske, көзі

1 жауаптар

Бірнеше көп өлшемді интеграциялық алгоритмдерді іске асыратын CRAN-да R2Cuba бумасы бар:

Мен мұны мысал функциясымен тексеруге тырыстым, ал қарапайым жағдайда барлық алгоритмдерді жұмыс істей алмадым (бірақ шын мәнінде қатты тырыспадым) және жұмыс істеген бірнеше әдіс < code> adaptIntegrate параметрін әдепкі параметрмен орнатыңыз, бірақ мүмкін, осы бағдарламаңызда бұл пакет жұмыс істеуге тұрарлық болуы мүмкін.

2
қосылды