org.apache.commons.math3.analysis.solvers

## Class BrentSolver

- java.lang.Object
- - org.apache.commons.math3.analysis.solvers.BaseAbstractUnivariateSolver<UnivariateFunction>
  - - org.apache.commons.math3.analysis.solvers.AbstractUnivariateSolver
    - - org.apache.commons.math3.analysis.solvers.BrentSolver

- All Implemented Interfaces:
    BaseUnivariateSolver<UnivariateFunction>, UnivariateSolver

      public class BrentSolver
      extends AbstractUnivariateSolver

  This class implements the Brent algorithm for finding zeros of real univariate functions. The function should be continuous but not necessarily smooth. The `solve` method returns a zero `x` of the function `f` in the given interval `[a, b]` to within a tolerance `6 eps abs(x) + t` where `eps` is the relative accuracy and `t` is the absolute accuracy. The given interval must bracket the root.
  Version:
    $Id: BrentSolver.java 1379560 2012-08-31 19:40:30Z erans $

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private static double` | `DEFAULT_ABSOLUTE_ACCURACY` Default absolute accuracy.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `BrentSolver()` Construct a solver with default accuracy (1e-6).
    `BrentSolver(double absoluteAccuracy)` Construct a solver.
    `BrentSolver(double relativeAccuracy, double absoluteAccuracy)` Construct a solver.
    `BrentSolver(double relativeAccuracy, double absoluteAccuracy, double functionValueAccuracy)` Construct a solver.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `private double` | `brent(double lo, double hi, double fLo, double fHi)` Search for a zero inside the provided interval.
    `protected double` | `doSolve()` Method for implementing actual optimization algorithms in derived classes.

    - ### Methods inherited from class org.apache.commons.math3.analysis.solvers.BaseAbstractUnivariateSolver

      `computeObjectiveValue, getAbsoluteAccuracy, getEvaluations, getFunctionValueAccuracy, getMax, getMaxEvaluations, getMin, getRelativeAccuracy, getStartValue, incrementEvaluationCount, isBracketing, isSequence, setup, solve, solve, solve, verifyBracketing, verifyInterval, verifySequence`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.apache.commons.math3.analysis.solvers.BaseUnivariateSolver

      `getAbsoluteAccuracy, getEvaluations, getFunctionValueAccuracy, getMaxEvaluations, getRelativeAccuracy, solve, solve, solve`

- - ### Field Detail

    - #### DEFAULT_ABSOLUTE_ACCURACY

          private static final double DEFAULT_ABSOLUTE_ACCURACY

      Default absolute accuracy.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### BrentSolver

          public BrentSolver()

      Construct a solver with default accuracy (1e-6).

    - #### BrentSolver

          public BrentSolver(double absoluteAccuracy)

      Construct a solver.
      Parameters:
        `absoluteAccuracy` - Absolute accuracy.

    - #### BrentSolver

          public BrentSolver(double relativeAccuracy,
                     double absoluteAccuracy)

      Construct a solver.
      Parameters:
        `relativeAccuracy` - Relative accuracy.
        `absoluteAccuracy` - Absolute accuracy.

    - #### BrentSolver

          public BrentSolver(double relativeAccuracy,
                     double absoluteAccuracy,
                     double functionValueAccuracy)

      Construct a solver.
      Parameters:
        `relativeAccuracy` - Relative accuracy.
        `absoluteAccuracy` - Absolute accuracy.
        `functionValueAccuracy` - Function value accuracy.

  - ### Method Detail

    - #### doSolve

          protected double doSolve()
                            throws NoBracketingException,
                                   TooManyEvaluationsException,
                                   NumberIsTooLargeException

      Method for implementing actual optimization algorithms in derived classes.
      Specified by:
        `doSolve` in class `BaseAbstractUnivariateSolver<UnivariateFunction>`
      Returns:
        the root.
      Throws:
        `NoBracketingException` - if the initial search interval does not bracket a root and the solver requires it.
        `TooManyEvaluationsException` - if the maximal number of evaluations is exceeded.
        `NumberIsTooLargeException`

    - #### brent

          private double brent(double lo,
                     double hi,
                     double fLo,
                     double fHi)

      Search for a zero inside the provided interval. This implementation is based on the algorithm described at page 58 of the book Algorithms for Minimization Without Derivatives Richard P. Brent Dover 0-486-41998-3
      Parameters:
        `lo` - Lower bound of the search interval.
        `hi` - Higher bound of the search interval.
        `fLo` - Function value at the lower bound of the search interval.
        `fHi` - Function value at the higher bound of the search interval.
      Returns:
        the value where the function is zero.

Copyright (c) 2003-2013 Apache Software Foundation