Integrate a function within specified limits using method
specified. Further arguments specific to method as well as other
arguments to f may be passed. For defaults used in each method, see
help on the method or default_args()
.
cubintegrate(
f,
lower,
upper,
fDim = 1,
method = c("hcubature", "pcubature", "cuhre", "divonne", "suave", "vegas"),
relTol = 1e-05,
absTol = 1e-12,
maxEval = 10^6,
nVec = 1L,
...
)
The function (integrand) to be integrated. Can be
vectorized version, but the additional arguments ...
must indicate via either vectorInterface = TRUE
for
hcubature
and pcubature
, or a value for nVec
. See
details on each method.
The lower limit of integration, a vector for hypercubes.
The upper limit of integration, a vector for hypercubes.
The number of components of f, default 1, bears no relation to the dimension of the hypercube over which integration is performed.
the method to use should be one of "hcubature", "pcubature", "cuhre", "divonne", "suave" or "vegas".
The maximum tolerance, default 1e-5.
the absolute tolerance, default 1e-12.
The maximum number of function evaluations needed, default 10^6. Note that the actual number of function evaluations performed is only approximately guaranteed not to exceed this number.
the number of vectorization points for Cuba C library, default 1, but can be set to an integer > 1 for vectorization, for example, 1024. The function f above needs to handle the vector of points appropriately; see vignette examples. Unlike Cuba, the cubature C library manages the number of points on its own and can vary between calls. Therefore, any value for nVec greater than one implies vectorization for a cubature method.
All other arguments which may include integration method specific parameters and those for f. Unrecognized parameters for integration method are presumed to be intended for f and so processed.
The returned value is a list of items: -
the value of the integral
-
the estimated absolute error
the number of times the function was evaluated
- returnCodethe actual integer return code of the C routine; a non-zero value usually indicates problems; further interpretation depends on method -
for Cuba routines, the actual number of subregions needed
the \(\chi^2\)-probability (not the
\(\chi^2\)-value itself!) that error
is not a
reliable estimate of the true integration error.
I.1d <- function(x) {
sin(4*x) *
x * ((x * ( x * (x*x-4) + 1) - 1))
}
I.1d_v <- function(x) {
matrix(apply(x, 2, function(z)
sin(4 * z) *
z * ((z * ( z * (z * z - 4) + 1) - 1))),
ncol = ncol(x))
}
cubintegrate(f = I.1d, lower = -2, upper = 2, method = "pcubature")
#> $integral
#> [1] 1.635644
#>
#> $error
#> [1] 1.332268e-15
#>
#> $neval
#> [1] 65
#>
#> $returnCode
#> [1] 0
#>
cubintegrate(f = I.1d, lower = -2, upper = 2, method = "cuhre", flags=list(verbose = 2))
#> $integral
#> [1] 1.635644
#>
#> $error
#> [1] 1.518009e-05
#>
#> $nregions
#> [1] 12
#>
#> $neval
#> [1] 253
#>
#> $prob
#> [1] 0
#>
#> $returnCode
#> [1] 0
#>
cubintegrate(f = I.1d_v, lower = -2, upper = 2, method = "hcubature", nVec = 2L)
#> $integral
#> [1] 1.635644
#>
#> $error
#> [1] 4.024021e-09
#>
#> $neval
#> [1] 105
#>
#> $returnCode
#> [1] 0
#>
cubintegrate(f = I.1d_v, lower = -2, upper = 2, method = "cuhre", nVec = 128L)
#> $integral
#> [1] 1.635644
#>
#> $error
#> [1] 1.518009e-05
#>
#> $nregions
#> [1] 12
#>
#> $neval
#> [1] 253
#>
#> $prob
#> [1] 0
#>
#> $returnCode
#> [1] 0
#>