distrEx (version 2.6.1)

distrExIntegrate: Integration of One-Dimensional Functions

Description

Numerical integration via integrate. In case integrate fails a Gauss-Legendre quadrature is performed.

Usage

distrExIntegrate(f, lower, upper, subdivisions = 100, 
                 rel.tol = .Machine$double.eps^0.25, 
                 abs.tol = rel.tol, stop.on.error = TRUE, 
                 distr, order, ...)

Arguments

f

an R function taking a numeric first argument and returning a numeric vector of the same length. Returning a non-finite element will generate an error.

lower

lower limit of integration. Can be -Inf.

upper

upper limit of integration. Can be Inf.

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.

distr

object of class UnivariateDistribution.

order

order of Gauss-Legendre quadrature.

additional arguments to be passed to f. Remember to use argument names not matching those of integrate and GLIntegrate!

Value

Estimate of the integral.

Details

This function calls integrate. In case integrate returns an error a Gauss-Legendre integration is performed using GLIntegrate. If lower or (and) upper are infinite the GLIntegrateTruncQuantile, respectively the 1-GLIntegrateTruncQuantile quantile of distr is used instead.

References

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

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

W.H. Press, S.A. Teukolsky, W.T. Vetterling, B.P. Flannery (1992) Numerical Recipies in C. The Art of Scientific Computing. Second Edition. Cambridge University Press.

See Also

integrate, GLIntegrate, distrExOptions

Examples

Run this code
# NOT RUN {
fkt <- function(x){x*dchisq(x+1, df = 1)}
integrate(fkt, lower = -1, upper = 3)
GLIntegrate(fkt, lower = -1, upper = 3)
try(integrate(fkt, lower = -1, upper = 5))
distrExIntegrate(fkt, lower = -1, upper = 5)
# }

Run the code above in your browser using DataLab