diff --git a/wafo/integrate.py b/wafo/integrate.py index a92e9bd..86ffb5b 100644 --- a/wafo/integrate.py +++ b/wafo/integrate.py @@ -1053,6 +1053,55 @@ def richardson(q_val, k): class _Quadgr(object): + """ + Gauss-Legendre quadrature with Richardson extrapolation. + + [q_val,ERR] = QUADGR(FUN,A,B,TOL) approximates the integral of a function + FUN from A to B with an absolute error tolerance TOL. FUN is a function + handle and must accept vector arguments. TOL is 1e-6 by default. q_val is + the integral approximation and ERR is an estimate of the absolute + error. + + QUADGR uses a 12-point Gauss-Legendre quadrature. The error estimate is + based on successive interval bisection. Richardson extrapolation + accelerates the convergence for some integrals, especially integrals + with endpoint singularities. + + Examples + -------- + >>> import numpy as np + >>> q_val, err = quadgr(np.log,0,1) + >>> q, err = quadgr(np.exp,0,9999*1j*np.pi) + >>> np.allclose(q, -2.0000000000122662), err < 1.0e-08 + (True, True) + + >>> q, err = quadgr(lambda x: np.sqrt(4-x**2), 0, 2, abseps=1e-12) + >>> np.allclose(q, 3.1415926535897811), err < 1.0e-12 + (True, True) + + >>> q, err = quadgr(lambda x: x**-0.75, 0, 1) + >>> np.allclose(q, 4), err < 1.e-13 + (True, True) + + >>> q, err = quadgr(lambda x: 1./np.sqrt(1-x**2), -1, 1) + >>> np.allclose(q, 3.141596056985029), err < 1.0e-05 + (True, True) + + >>> q, err = quadgr(lambda x: np.exp(-x**2), -np.inf, np.inf, 1e-9) + >>> np.allclose(q, np.sqrt(np.pi)), err < 1e-9 + (True, True) + + >>> q, err = quadgr(lambda x: np.cos(x)*np.exp(-x), 0, np.inf, 1e-9) + >>> np.allclose(q, 0.5), err < 1e-9 + (True, True) + + See also + -------- + QUAD, + QUADGK + """ + # Author: jonas.lundgren@saabgroup.com, 2009. license BSD + # Order limits (required if infinite limits) def _change_variable_and_integrate(self, fun, a, b, abseps, max_iter): isreal = np.isreal(a) & np.isreal(b) & ~np.isnan(a) & ~np.isnan(b) @@ -1162,55 +1211,6 @@ class _Quadgr(object): return a, b, False def __call__(self, fun, a, b, abseps=1e-5, max_iter=17): - """ - Gauss-Legendre quadrature with Richardson extrapolation. - - [q_val,ERR] = QUADGR(FUN,A,B,TOL) approximates the integral of a function - FUN from A to B with an absolute error tolerance TOL. FUN is a function - handle and must accept vector arguments. TOL is 1e-6 by default. q_val is - the integral approximation and ERR is an estimate of the absolute - error. - - QUADGR uses a 12-point Gauss-Legendre quadrature. The error estimate is - based on successive interval bisection. Richardson extrapolation - accelerates the convergence for some integrals, especially integrals - with endpoint singularities. - - Examples - -------- - >>> import numpy as np - >>> q_val, err = quadgr(np.log,0,1) - >>> q, err = quadgr(np.exp,0,9999*1j*np.pi) - >>> np.allclose(q, -2.0000000000122662), err < 1.0e-08 - (True, True) - - >>> q, err = quadgr(lambda x: np.sqrt(4-x**2), 0, 2, abseps=1e-12) - >>> np.allclose(q, 3.1415926535897811), err < 1.0e-12 - (True, True) - - >>> q, err = quadgr(lambda x: x**-0.75, 0, 1) - >>> np.allclose(q, 4), err < 1.e-13 - (True, True) - - >>> q, err = quadgr(lambda x: 1./np.sqrt(1-x**2), -1, 1) - >>> np.allclose(q, 3.141596056985029), err < 1.0e-05 - (True, True) - - >>> q, err = quadgr(lambda x: np.exp(-x**2), -np.inf, np.inf, 1e-9) - >>> np.allclose(q, np.sqrt(np.pi)), err < 1e-9 - (True, True) - - >>> q, err = quadgr(lambda x: np.cos(x)*np.exp(-x), 0, np.inf, 1e-9) - >>> np.allclose(q, 0.5), err < 1e-9 - (True, True) - - See also - -------- - QUAD, - QUADGK - """ - # Author: jonas.lundgren@saabgroup.com, 2009. license BSD - # Order limits (required if infinite limits) a = np.asarray(a) b = np.asarray(b) if a == b: