Removed tabs from c_functions.c refaactored quadgr

master
Per A Brodtkorb 9 years ago
parent 4366d3eeb0
commit c2a9247d00

@ -1003,14 +1003,17 @@ def richardson(Q, k):
return R return R
def quadgr(fun, a, b, abseps=1e-5, max_iter=17): class _Quadgr(object):
def __call__(self, fun, a, b, abseps=1e-5, max_iter=17):
''' '''
Gauss-Legendre quadrature with Richardson extrapolation. Gauss-Legendre quadrature with Richardson extrapolation.
[Q,ERR] = QUADGR(FUN,A,B,TOL) approximates the integral of a function [Q,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 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 is handle and must accept vector arguments. TOL is 1e-6 by default. Q is
the integral approximation and ERR is an estimate of the absolute error. the integral approximation and ERR is an estimate of the absolute
error.
QUADGR uses a 12-point Gauss-Legendre quadrature. The error estimate is QUADGR uses a 12-point Gauss-Legendre quadrature. The error estimate is
based on successive interval bisection. Richardson extrapolation based on successive interval bisection. Richardson extrapolation
@ -1116,7 +1119,8 @@ def quadgr(fun, a, b, abseps=1e-5, max_iter=17):
hh = hh / 2 hh = hh / 2
x = np.hstack([x + a, x + b]) / 2 x = np.hstack([x + a, x + b]) / 2
# Quadrature # Quadrature
Q0[k] = hh * np.sum(wq * np.sum(np.reshape(fun(x), (-1, nq)), axis=0), Q0[k] = hh * np.sum(wq * np.sum(np.reshape(fun(x), (-1, nq)),
axis=0),
axis=0) axis=0)
# Richardson extrapolation # Richardson extrapolation
@ -1148,7 +1152,8 @@ def quadgr(fun, a, b, abseps=1e-5, max_iter=17):
if (err < abseps) | ~np.isfinite(Q): if (err < abseps) | ~np.isfinite(Q):
break break
else: else:
warnings.warn('Max number of iterations reached without convergence.') warnings.warn('Max number of iterations reached without ' +
'convergence.')
if ~ np.isfinite(Q): if ~ np.isfinite(Q):
warnings.warn('Integral approximation is Infinite or NaN.') warnings.warn('Integral approximation is Infinite or NaN.')
@ -1161,6 +1166,8 @@ def quadgr(fun, a, b, abseps=1e-5, max_iter=17):
return Q, err return Q, err
quadgr = _Quadgr()
def boole(y, x): def boole(y, x):
a, b = x[0], x[-1] a, b = x[0], x[-1]

Loading…
Cancel
Save