Class 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 the Trapezoidal 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.
    See Also:
    • Constructor Detail

      • Simpson

        public Simpson​(double precision,
                       int maxIterations)
        Construct an integrator that implements Simpson's rule.
        Parameters:
        precision - the convergence threshold
        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 interface Integrator
        Parameters:
        f - a univariate function
        a - the lower limit
        b - 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 interface IterativeIntegrator
        Parameters:
        iteration - the index/count for the current iteration, counting from 1
        f - the integrand
        a - the lower limit
        b - the upper limit
        sum - 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
      • 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 interface IterativeIntegrator
        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 an IterativeIntegrator, the integral is considered converged if the relative error of two successive sums is less than the threshold.
        Specified by:
        getPrecision in interface Integrator
        Returns:
        the precision