Class NewtonCotes
- java.lang.Object
-
- dev.nm.analysis.integration.univariate.riemann.newtoncotes.NewtonCotes
-
- All Implemented Interfaces:
Integrator,IterativeIntegrator
- Direct Known Subclasses:
Midpoint,Trapezoidal
public class NewtonCotes extends Object implements IterativeIntegrator
The Newton-Cotes formulae, also called the Newton-Cotes quadrature rules or simply Newton-Cotes rules, are a group of formulae for numerical integration (also called quadrature) based on evaluating the integrand at equally-spaced points. A number of standard numerical quadrature methods are special cases of the more general Newton-Cotes formula, e.g., the Trapezoidal rule (rate = 2), the Midpoint method (rate = 2and specifyingOPENformula). This implementation is based on the Euler-Maclaurin formula.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classNewtonCotes.TypeThere are two types of the Newton-Cotes method: OPEN and CLOSED.
-
Constructor Summary
Constructors Constructor Description NewtonCotes(int rate, NewtonCotes.Type type, double precision, int maxIterations)Construct an instance of the Newton-Cotes quadrature.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intgetMaxIterations()Get the maximum number of iterations for this iterative procedure.doublegetPrecision()Get the convergence threshold.doubleh()Get the discretization size for the current iteration.doubleintegrate(UnivariateRealFunction f, double a, double b)Integrate function f from a to b, \[ \int_a^b\! f(x)\, dx \]doublenext(int iter, UnivariateRealFunction f, double a, double b, double sum0)Compute a refined sum for the integral.
-
-
-
Constructor Detail
-
NewtonCotes
public NewtonCotes(int rate, NewtonCotes.Type type, double precision, int maxIterations)Construct an instance of the Newton-Cotes quadrature.- Parameters:
rate- the rate of further sub-dividing an integral interval. For example, whenrate = 2, we divide [xi, xi+1] into two equal length intervals. This is equivalent to the Trapezoidal rule.type- specifying whether to use CLOSED or OPEN formulaprecision- the precision required, e.g.,1e-8maxIterations- the maximum number of iterations
-
-
Method Detail
-
integrate
public double integrate(UnivariateRealFunction f, double a, double b)
Description copied from interface:IntegratorIntegrate function f from a to b, \[ \int_a^b\! f(x)\, dx \]- Specified by:
integratein interfaceIntegrator- Parameters:
f- a univariate functiona- the lower limitb- the upper limit- Returns:
- \(\int_a^b\! f(x)\, dx\)
-
next
public double next(int iter, UnivariateRealFunction f, double a, double b, double sum0)Description copied from interface:IterativeIntegratorCompute a refined sum for the integral.- Specified by:
nextin interfaceIterativeIntegrator- Parameters:
iter- the index/count for the current iteration, counting from 1f- the integranda- the lower limitb- the upper limitsum0- the last sum- Returns:
- a refined sum
-
h
public double h()
Description copied from interface:IterativeIntegratorGet the discretization size for the current iteration.- Specified by:
hin interfaceIterativeIntegrator- Returns:
- the discretization size
-
getMaxIterations
public int getMaxIterations()
Description copied from interface:IterativeIntegratorGet 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:
getMaxIterationsin interfaceIterativeIntegrator- Returns:
- the maximum number of iterations
-
getPrecision
public double getPrecision()
Description copied from interface:IntegratorGet the convergence threshold. The usage depends on the specific integrator. For example, for anIterativeIntegrator, the integral is considered converged if the relative error of two successive sums is less than the threshold.- Specified by:
getPrecisionin interfaceIntegrator- Returns:
- the precision
-
-