org.apache.commons.math3.analysis.solvers
public class BracketingNthOrderBrentSolver extends AbstractUnivariateSolver implements BracketedUnivariateSolver<UnivariateFunction>
The changes with respect to the original Brent algorithm are:
AllowedSolution
,Modifier and Type | Field and Description |
---|---|
private AllowedSolution |
allowed
The kinds of solutions that the algorithm may accept.
|
private static double |
DEFAULT_ABSOLUTE_ACCURACY
Default absolute accuracy.
|
private static int |
DEFAULT_MAXIMAL_ORDER
Default maximal order.
|
private static int |
MAXIMAL_AGING
Maximal aging triggering an attempt to balance the bracketing interval.
|
private int |
maximalOrder
Maximal order.
|
private static double |
REDUCTION_FACTOR
Reduction factor for attempts to balance the bracketing interval.
|
Constructor and Description |
---|
BracketingNthOrderBrentSolver()
Construct a solver with default accuracy and maximal order (1e-6 and 5 respectively)
|
BracketingNthOrderBrentSolver(double relativeAccuracy,
double absoluteAccuracy,
double functionValueAccuracy,
int maximalOrder)
Construct a solver.
|
BracketingNthOrderBrentSolver(double relativeAccuracy,
double absoluteAccuracy,
int maximalOrder)
Construct a solver.
|
BracketingNthOrderBrentSolver(double absoluteAccuracy,
int maximalOrder)
Construct a solver.
|
Modifier and Type | Method and Description |
---|---|
protected double |
doSolve()
Method for implementing actual optimization algorithms in derived
classes.
|
int |
getMaximalOrder()
Get the maximal order.
|
private double |
guessX(double targetY,
double[] x,
double[] y,
int start,
int end)
Guess an x value by nth order inverse polynomial interpolation.
|
double |
solve(int maxEval,
UnivariateFunction f,
double min,
double max,
AllowedSolution allowedSolution)
Solve for a zero in the given interval.
|
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 . |
computeObjectiveValue, getAbsoluteAccuracy, getEvaluations, getFunctionValueAccuracy, getMax, getMaxEvaluations, getMin, getRelativeAccuracy, getStartValue, incrementEvaluationCount, isBracketing, isSequence, setup, solve, solve, solve, verifyBracketing, verifyInterval, verifySequence
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getAbsoluteAccuracy, getEvaluations, getFunctionValueAccuracy, getMaxEvaluations, getRelativeAccuracy, solve, solve, solve
private static final double DEFAULT_ABSOLUTE_ACCURACY
private static final int DEFAULT_MAXIMAL_ORDER
private static final int MAXIMAL_AGING
private static final double REDUCTION_FACTOR
private final int maximalOrder
private AllowedSolution allowed
public BracketingNthOrderBrentSolver()
public BracketingNthOrderBrentSolver(double absoluteAccuracy, int maximalOrder) throws NumberIsTooSmallException
absoluteAccuracy
- Absolute accuracy.maximalOrder
- maximal order.NumberIsTooSmallException
- if maximal order is lower than 2public BracketingNthOrderBrentSolver(double relativeAccuracy, double absoluteAccuracy, int maximalOrder) throws NumberIsTooSmallException
relativeAccuracy
- Relative accuracy.absoluteAccuracy
- Absolute accuracy.maximalOrder
- maximal order.NumberIsTooSmallException
- if maximal order is lower than 2public BracketingNthOrderBrentSolver(double relativeAccuracy, double absoluteAccuracy, double functionValueAccuracy, int maximalOrder) throws NumberIsTooSmallException
relativeAccuracy
- Relative accuracy.absoluteAccuracy
- Absolute accuracy.functionValueAccuracy
- Function value accuracy.maximalOrder
- maximal order.NumberIsTooSmallException
- if maximal order is lower than 2public int getMaximalOrder()
protected double doSolve() throws TooManyEvaluationsException, NumberIsTooLargeException, NoBracketingException
doSolve
in class BaseAbstractUnivariateSolver<UnivariateFunction>
TooManyEvaluationsException
- if the maximal number of evaluations
is exceeded.NoBracketingException
- if the initial search interval does not bracket
a root and the solver requires it.NumberIsTooLargeException
private double guessX(double targetY, double[] x, double[] y, int start, int end)
The x value is guessed by evaluating polynomial Q(y) at y = targetY, where Q is built such that for all considered points (xi, yi), Q(yi) = xi.
targetY
- target value for yx
- reference points abscissas for interpolation,
note that this array is modified during computationy
- reference points ordinates for interpolationstart
- start index of the points to consider (inclusive)end
- end index of the points to consider (exclusive)public double solve(int maxEval, UnivariateFunction f, double min, double max, AllowedSolution allowedSolution) throws TooManyEvaluationsException, NumberIsTooLargeException, NoBracketingException
solve
in interface BracketedUnivariateSolver<UnivariateFunction>
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.TooManyEvaluationsException
- if
the allowed number of evaluations is exceeded.NumberIsTooLargeException
NoBracketingException
public double solve(int maxEval, UnivariateFunction f, double min, double max, double startValue, AllowedSolution allowedSolution) throws TooManyEvaluationsException, NumberIsTooLargeException, NoBracketingException
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.solve
in interface BracketedUnivariateSolver<UnivariateFunction>
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.TooManyEvaluationsException
- if
the allowed number of evaluations is exceeded.NumberIsTooLargeException
NoBracketingException
Copyright (c) 2003-2013 Apache Software Foundation