R: Integration of One-Dimensional Functions

integrate {base} | R Documentation

## Integration of One-Dimensional Functions

### Description

Adaptive quadrature of functions of one variable over a finit or infinite interval.

### Usage

    integrate(f, lower, upper, subdivisions=100,
              rel.tol = .Machine$double.eps^0.25, abs.tol = rel.tol,
              stop.on.error = TRUE, keep.xy = FALSE, aux = NULL, ...)

### Arguments

`f` | An R function taking a numeric first argument and returning a numeric vector the same length. Returning a non-finite will generate an error.
`lower, upper` | The limits of integration. Can be infinite.
`subdivisions` | the maximum number of subintervals.
`rel.tol` | relative accuracy requested.
`abs.tol` | absolute accuracy requested.
`stop.on.error` | logical. If true (the default) an error stops the function. If false some errors will give a result with a warning in the `message` component.
`keep.xy` | unused. For compatibility with S.
`aux` | unused. For compatibility with S.
`...` | additional arguments to be passes to `f`.

### Details

If one or both limits are infinite, the infinite range is mapped onto a finite interval.

For a finite interval, globally adaptive interval subdivision is used in connection with extrapolation by the Epsilon algorithm.

`rel.tol` cannot be less than `max(50*.Machine$double.eps, 0.5e-28)` if `abs.tol <= 0`.

### Value

A list of class `"integrate"` with components

`value` | the final estimate of the integral.
`abs.error` | estimate of the modulus of the absolute error.
`subdivisions` | the number of subintervals produced in the subdivision process.
`message` | `"OK"` or a character string giving the error message.
`call` | the matched call.

### References

Based on QUADPACK routines `dqags` and `dqagi` by R. Piessens and E. deDoncker-Kapenga, available from Netlib.

See\ R. Piessens, E. deDoncker-Kapenga, C. Uberhuber, D. Kahaner Quadpack: a Subroutine Package for Automatic Integration. Springer Verlag, 1983.

### Examples

    integrate(dnorm, -1.96, 1.96)
    integrate(dnorm, -Inf, Inf)

    ## a slowly-convergent integral
    integrand <- function(x) {1/((x+1)*sqrt(x))}
    integrate(integrand, lower = 0, upper = Inf)
    integrate(integrand, lower = 0, upper = 10)
    integrate(integrand, lower = 0, upper = 100000)
    integrate(integrand, lower = 0, upper = 1000000, stop.on.error = FALSE)

    try(integrate(function(x) 2, 0, 1))  ## no vectorizable function
    integrate(function(x) rep(2, length(x)), 0, 1)  ## correct

[Package Contents]