SuanShu, a Java numerical and statistical library

com.numericalmethod.suanshu.analysis.integration.univariate.riemann
Class EulerMaclaurin

java.lang.Object
  extended by com.numericalmethod.suanshu.analysis.integration.univariate.riemann.EulerMaclaurin
All Implemented Interfaces:
Integrator, IterativeIntegrator
Direct Known Subclasses:
Midpoint, Trapezoidal

public class EulerMaclaurin
extends java.lang.Object
implements IterativeIntegrator

This class implements a specialized group of the Newton-Cotes integration methods using the Euler-Maclaurin formula.

This class forms the basis for a few standard numerical quadrature methods with equally spaced interpolation points. The extraploation method uses Neville's algorithm.

By customizing this class, one can construct various standard numerical quadrature algoritms, such as

See Also:

Nested Class Summary
static class EulerMaclaurin.NewtonCotesType
          Newton-Cotes methods can be classified into two categories: OPEN and CLOSED.
 
Field Summary
 int maxIterations
          the maximum number of iterations for this iterative procedure For those integrals that do not converge, we need to put a bound on the number of iterations.
 double precision
          the convergence threshold The iterative procedure converges when the relative difference between two successive sums is less than precision.
 int rate
          the rate of sub-dividing an interval Starting with the whole interval (b-a), we divide each sub-interval into rate many intervals.
 EulerMaclaurin.NewtonCotesType type
          indicate whether the two end points are included for computation
 
Constructor Summary
EulerMaclaurin(int rate, EulerMaclaurin.NewtonCotesType type, double precision, int maxIterations)
          Construct an instance of the Euler-Maclaurin formula.
 
Method Summary
 double h()
          Get the discretization size for the current iteration.
 double integrate(UnivariateRealFunction f, double a, double b)
          Integrate function f from a to b.
 int maxIterations()
          Get the maximum number of iterations for this iterative procedure.
 double next(int iter, UnivariateRealFunction f, double a, double b, double sum0)
          Compute a refined sum for the integral.
 double precision()
          Get the convergence threshold.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

rate

public final int rate
the rate of sub-dividing an interval

Starting with the whole interval (b-a), we divide each sub-interval into rate many intervals. For example, when rate = 2, we double the number of intervals, hence abscissas, in each iteration.

Note: the number of abscissas grows exponentially.


type

public final EulerMaclaurin.NewtonCotesType type
indicate whether the two end points are included for computation


precision

public final double precision
the convergence threshold

The iterative procedure converges when the relative difference between two successive sums is less than precision.


maxIterations

public final int maxIterations
the maximum number of iterations for this iterative procedure

For those integrals that do not converge, we need to put a bound on the number of iterations.

Note that the number of abscissas grows exponentially with each iteration, i.e., rateiterations. Thus, maxIterations should not be too big. Be careful when choosing maxIterations, as it may severely affect the performance.

Constructor Detail

EulerMaclaurin

public EulerMaclaurin(int rate,
                      EulerMaclaurin.NewtonCotesType type,
                      double precision,
                      int maxIterations)
Construct an instance of the Euler-Maclaurin formula.

Parameters:
rate - the rate of further sub-dividing the integral interval.

For example, when rate = 2, we will divide [xi, xi+1] into two equal length intervals. This is equivalent to the Trapezoidal rule.

type - specifying whether to use CLOSED or OPEN formula
precision - the precision required, e.g., 1e-8
maxIterations - the maximum number of iterations
Method Detail

integrate

public double integrate(UnivariateRealFunction f,
                        double a,
                        double b)
Description copied from interface: Integrator
Integrate function f from a to b.
 / b
 |   f(x) dx
 / a
 

Specified by:
integrate in interface Integrator
Parameters:
f - a univariate function
a - lower limit
b - upper limit
Returns:
Σ(f(x))

next

public double next(int iter,
                   UnivariateRealFunction f,
                   double a,
                   double b,
                   double sum0)
Description copied from interface: IterativeIntegrator
Compute a refined sum for the integral.

Specified by:
next in interface IterativeIntegrator
Parameters:
iter - the index/count for the iterations; it counts from 1
f - the integrand
a - the lower limit
b - the upper limit
sum0 - the last sum
Returns:
a refined sum

h

public double h()
Description copied from interface: IterativeIntegrator
Get the discretization size for the current iteration.

Specified by:
h in interface IterativeIntegrator
Returns:
the discretization size

maxIterations

public int maxIterations()
Description copied from interface: IterativeIntegrator
Get the maximum number of iterations for this iterative procedure. For those integrals that do not converge, we need to put a bound on the number of iterations to avoid infinite looping.

Specified by:
maxIterations in interface IterativeIntegrator
Returns:
the maximum number of iterations

precision

public double precision()
Description copied from interface: Integrator
Get the convergence threshold. The usage depends on the specific integrator.

For example, for an IterativeIntegrator, the integral is considered converged if the relative error of two successive sums is less than the threshold.

Specified by:
precision in interface Integrator
Returns:
the precision

SuanShu, a Java numerical and statistical library

Copyright © 2011 Numerical Method Inc. Ltd. All Rights Reserved.