org.apache.commons.math3.analysis.solvers
Class BrentSolver

java.lang.Object
  extended by org.apache.commons.math3.analysis.solvers.BaseAbstractUnivariateSolver<UnivariateFunction>
      extended by org.apache.commons.math3.analysis.solvers.AbstractUnivariateSolver
          extended by 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 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