## 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
`private static double` `DEFAULT_ABSOLUTE_ACCURACY` Default absolute accuracy.

Constructor Summary
`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
`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 <quote> Algorithms for Minimization Without Derivatives <it>Richard P. Brent</it> Dover 0-486-41998-3 </quote>

  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