tplquad#
- scipy.integrate.tplquad(func, a, b, gfun, hfun, qfun, rfun, args=(), epsabs=1.49e-08, epsrel=1.49e-08)[source]#
Compute a triple (definite) integral.
Return the triple integral of
func(z, y, x)fromx = a..b,y = gfun(x)..hfun(x), andz = qfun(x,y)..rfun(x,y).- Parameters:
- funcfunction
A Python function or method of at least three variables in the order (z, y, x).
- a, bfloat
The limits of integration in x: a < b
- gfunfunction or float
The lower boundary curve in y which is a function taking a single floating point argument (x) and returning a floating point result or a float indicating a constant boundary curve.
- hfunfunction or float
The upper boundary curve in y (same requirements as gfun).
- qfunfunction or float
The lower boundary surface in z. It must be a function that takes two floats in the order (x, y) and returns a float or a float indicating a constant boundary surface.
- rfunfunction or float
The upper boundary surface in z. (Same requirements as qfun.)
- argstuple, optional
Extra arguments to pass to func.
- epsabsfloat, optional
Absolute tolerance passed directly to the innermost 1-D quadrature integration. Default is 1.49e-8.
- epsrelfloat, optional
Relative tolerance of the innermost 1-D integrals. Default is 1.49e-8.
- Returns:
- yfloat
The resultant integral.
- abserrfloat
An estimate of the error.
See also
quadAdaptive quadrature using QUADPACK
fixed_quadFixed-order Gaussian quadrature
dblquadDouble integrals
nquadN-dimensional integrals
rombIntegrators for sampled data
simpsonIntegrators for sampled data
scipy.specialFor coefficients and roots of orthogonal polynomials
Notes
For valid results, the integral must converge; behavior for divergent integrals is not guaranteed.
Details of QUADPACK level routines
quadcalls routines from the FORTRAN library QUADPACK. This section provides details on the conditions for each routine to be called and a short description of each routine. For each level of integration,qagseis used for finite limits orqagieis used, if either limit (or both!) are infinite. The following provides a short description from [1] for each routine.- qagse
is an integrator based on globally adaptive interval subdivision in connection with extrapolation, which will eliminate the effects of integrand singularities of several types. The integration is is performed using a 21-point Gauss-Kronrod quadrature within each subinterval.
- qagie
handles integration over infinite intervals. The infinite range is mapped onto a finite interval and subsequently the same strategy as in
QAGSis applied.
References
[1]Piessens, Robert; de Doncker-Kapenga, Elise; Überhuber, Christoph W.; Kahaner, David (1983). QUADPACK: A subroutine package for automatic integration. Springer-Verlag. ISBN 978-3-540-12553-2.
Examples
Compute the triple integral of
x * y * z, overxranging from 1 to 2,yranging from 2 to 3,zranging from 0 to 1. That is, \(\int^{x=2}_{x=1} \int^{y=3}_{y=2} \int^{z=1}_{z=0} x y z \,dz \,dy \,dx\).>>> import numpy as np >>> from scipy import integrate >>> f = lambda z, y, x: x*y*z >>> integrate.tplquad(f, 1, 2, 2, 3, 0, 1) (1.8749999999999998, 3.3246447942574074e-14)
Calculate \(\int^{x=1}_{x=0} \int^{y=1-2x}_{y=0} \int^{z=1-x-2y}_{z=0} x y z \,dz \,dy \,dx\). Note: qfun/rfun takes arguments in the order (x, y), even though
ftakes arguments in the order (z, y, x).>>> f = lambda z, y, x: x*y*z >>> integrate.tplquad(f, 0, 1, 0, lambda x: 1-2*x, 0, lambda x, y: 1-x-2*y) (0.05416666666666668, 2.1774196738157757e-14)
Calculate \(\int^{x=1}_{x=0} \int^{y=1}_{y=0} \int^{z=1}_{z=0} a x y z \,dz \,dy \,dx\) for \(a=1, 3\).
>>> f = lambda z, y, x, a: a*x*y*z >>> integrate.tplquad(f, 0, 1, 0, 1, 0, 1, args=(1,)) (0.125, 5.527033708952211e-15) >>> integrate.tplquad(f, 0, 1, 0, 1, 0, 1, args=(3,)) (0.375, 1.6581101126856635e-14)
Compute the three-dimensional Gaussian Integral, which is the integral of the Gaussian function \(f(x,y,z) = e^{-(x^{2} + y^{2} + z^{2})}\), over \((-\infty,+\infty)\). That is, compute the integral \(\iiint^{+\infty}_{-\infty} e^{-(x^{2} + y^{2} + z^{2})} \,dz \,dy\,dx\).
>>> f = lambda x, y, z: np.exp(-(x ** 2 + y ** 2 + z ** 2)) >>> integrate.tplquad(f, -np.inf, np.inf, -np.inf, np.inf, -np.inf, np.inf) (5.568327996830833, 4.4619078828029765e-08)