Class Simpson
- java.lang.Object
-
- dev.nm.analysis.integration.univariate.riemann.newtoncotes.Simpson
-
- All Implemented Interfaces:
Integrator
,IterativeIntegrator
public class Simpson extends Object implements IterativeIntegrator
Simpson's rule can be thought of as a special case of Romberg's method. It is the weighted average (or extrapolation) of two successive iterations of theTrapezoidal
rule. Simpson's rule is often an accurate integration rule. Simpson's is expected to improve on the trapezoidal rule for functions which are twice continuously differentiable. However for rougher functions the trapezoidal rule is likely to be more preferable.
-
-
Constructor Summary
Constructors Constructor Description Simpson(double precision, int maxIterations)
Construct an integrator that implements Simpson's rule.
-
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 iteration, UnivariateRealFunction f, double a, double b, double sum)
Compute a refined sum for the integral.
-
-
-
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 iteration, UnivariateRealFunction f, double a, double b, double sum)
Description copied from interface:IterativeIntegrator
Compute a refined sum for the integral.- Specified by:
next
in interfaceIterativeIntegrator
- Parameters:
iteration
- the index/count for the current iteration, counting from 1f
- the integranda
- the lower limitb
- the upper limitsum
- 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
-
-