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 = 2
and specifyingOPEN
formula). This implementation is based on the Euler-Maclaurin formula.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
NewtonCotes.Type
There 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 int
getMaxIterations()
Get the maximum number of iterations for this iterative procedure.double
getPrecision()
Get the convergence threshold.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_a^b\! f(x)\, dx \]double
next(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-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, \[ \int_a^b\! f(x)\, dx \]- Specified by:
integrate
in 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:IterativeIntegrator
Compute a refined sum for the integral.- Specified by:
next
in 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:IterativeIntegrator
Get the discretization size for the current iteration.- Specified by:
h
in interfaceIterativeIntegrator
- Returns:
- the discretization size
-
getMaxIterations
public int getMaxIterations()
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:
getMaxIterations
in interfaceIterativeIntegrator
- Returns:
- the maximum number of iterations
-
getPrecision
public double getPrecision()
Description copied from interface:Integrator
Get 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:
getPrecision
in interfaceIntegrator
- Returns:
- the precision
-
-