Multidimensional numerical integration in pure Julia
Author pabloferz
13 Stars
Updated Last
2 Years Ago
Started In
March 2017


Build Status Coverage Status Coverage Status

This is library intended to provided multidimensional numerical integration routines in pure Julia


For the time being this library can only perform integrals in three dimensions.


  • Add rules for other dimensions
  • Make sure it works properly with complex valued functions
  • Parallelize
  • Improve the error estimates (the Cuba library and consequently Cuba.jl seem to calculate tighter errors)


NIntegration.jl should work on Julia 1.0 and later versions and can be installed from a Julia session by running

julia> using Pkg
julia> Pkg.add(PackageSpec(url = ""))


Once installed, run

using NIntegration

To integrate a function f(x, y, z) on the hyperrectangle defined by xmin and xmax, just call

    f::Function, xmin::NTuple{N}, xmax::NTuple{N};
    reltol = 1e-6, abstol = eps(), maxevals = 1000000

The above returns a tuple (I, E, n, R) of the calculated integral I, the estimated error E, the number of integrand evaluations n, and a list R of the subregions in which the integration domain was subdivided.

If you need to evaluate multiple functions (f₁, f₂, ...) on the same integration domain, you can evaluate the function f with more "features" and use its subregions list to estimate the integral for the rest of the functions in the list, e.g.

(I, E, n, R) = nintegrate(f, xmin, xmin)
I₁ = nintegrate(f₁, R)

Technical Algorithms and References

The integration algorithm is based on the one decribed in:

  • J. Berntsen, T. O. Espelid, and A. Genz, "An Adaptive Algorithm for the Approximate Calculation of Multiple Integrals," ACM Trans. Math. Soft., 17 (4), 437-451 (1991).



The author expresses his gratitude to Professor Alan Genz for some useful pointers.

This work was financially supported by CONACYT through grant 354884.