Class BaseSecantSolver

All Implemented Interfaces:
BaseUnivariateSolver<UnivariateFunction>, BracketedUnivariateSolver<UnivariateFunction>, UnivariateSolver
Direct Known Subclasses:
IllinoisSolver, PegasusSolver, RegulaFalsiSolver

public abstract class BaseSecantSolver extends AbstractUnivariateSolver implements BracketedUnivariateSolver<UnivariateFunction>
Base class for all bracketing Secant-based methods for root-finding (approximating a zero of a univariate real function).

Implementation of the Regula Falsi and Illinois methods is based on the following article: M. Dowell and P. Jarratt, A modified regula falsi method for computing the root of an equation, BIT Numerical Mathematics, volume 11, number 2, pages 168-174, Springer, 1971.

Implementation of the Pegasus method is based on the following article: M. Dowell and P. Jarratt, The "Pegasus" method for computing the root of an equation, BIT Numerical Mathematics, volume 12, number 4, pages 503-508, Springer, 1972.

The Secant method is not a bracketing method, so it is not implemented here. It has a separate implementation.

Since:
3.0
  • Field Details

    • DEFAULT_ABSOLUTE_ACCURACY

      protected static final double DEFAULT_ABSOLUTE_ACCURACY
      Default absolute accuracy.
      See Also:
  • Constructor Details

    • BaseSecantSolver

      protected BaseSecantSolver(double absoluteAccuracy, BaseSecantSolver.Method method)
      Construct a solver.
      Parameters:
      absoluteAccuracy - Absolute accuracy.
      method - Secant-based root-finding method to use.
    • BaseSecantSolver

      protected BaseSecantSolver(double relativeAccuracy, double absoluteAccuracy, BaseSecantSolver.Method method)
      Construct a solver.
      Parameters:
      relativeAccuracy - Relative accuracy.
      absoluteAccuracy - Absolute accuracy.
      method - Secant-based root-finding method to use.
    • BaseSecantSolver

      protected BaseSecantSolver(double relativeAccuracy, double absoluteAccuracy, double functionValueAccuracy, BaseSecantSolver.Method method)
      Construct a solver.
      Parameters:
      relativeAccuracy - Maximum relative error.
      absoluteAccuracy - Maximum absolute error.
      functionValueAccuracy - Maximum function value error.
      method - Secant-based root-finding method to use
  • Method Details

    • solve

      public double solve(int maxEval, UnivariateFunction f, double min, double max, AllowedSolution allowedSolution)
      Solve for a zero in the given interval. A solver may require that the interval brackets a single zero root. Solvers that do require bracketing should be able to handle the case where one of the endpoints is itself a root.
      Specified by:
      solve in interface BracketedUnivariateSolver<UnivariateFunction>
      Parameters:
      maxEval - Maximum number of evaluations.
      f - Function to solve.
      min - Lower bound for the interval.
      max - Upper bound for the interval.
      allowedSolution - The kind of solutions that the root-finding algorithm may accept as solutions.
      Returns:
      A value where the function is zero.
    • solve

      public double solve(int maxEval, UnivariateFunction f, double min, double max, double startValue, AllowedSolution allowedSolution)
      Solve for a zero in the given interval, start at startValue. A solver may require that the interval brackets a single zero root. Solvers that do require bracketing should be able to handle the case where one of the endpoints is itself a root.
      Specified by:
      solve in interface BracketedUnivariateSolver<UnivariateFunction>
      Parameters:
      maxEval - Maximum number of evaluations.
      f - Function to solve.
      min - Lower bound for the interval.
      max - Upper bound for the interval.
      startValue - Start value to use.
      allowedSolution - The kind of solutions that the root-finding algorithm may accept as solutions.
      Returns:
      A value where the function is zero.
    • solve

      public double solve(int maxEval, UnivariateFunction f, double min, double max, double startValue)
      Solve for a zero in the given interval, start at startValue. A solver may require that the interval brackets a single zero root. Solvers that do require bracketing should be able to handle the case where one of the endpoints is itself a root.
      Specified by:
      solve in interface BaseUnivariateSolver<UnivariateFunction>
      Overrides:
      solve in class BaseAbstractUnivariateSolver<UnivariateFunction>
      Parameters:
      maxEval - Maximum number of evaluations.
      f - Function to solve.
      min - Lower bound for the interval.
      max - Upper bound for the interval.
      startValue - Start value to use.
      Returns:
      a value where the function is zero.
    • doSolve

      protected final double doSolve() throws ConvergenceException
      Method for implementing actual optimization algorithms in derived classes.
      Specified by:
      doSolve in class BaseAbstractUnivariateSolver<UnivariateFunction>
      Returns:
      the root.
      Throws:
      ConvergenceException - if the algorithm failed due to finite precision.