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

java.lang.Object
  extended by org.apache.commons.math3.analysis.solvers.BaseAbstractUnivariateSolver<PolynomialFunction>
      extended by org.apache.commons.math3.analysis.solvers.AbstractPolynomialSolver
          extended by org.apache.commons.math3.analysis.solvers.LaguerreSolver
All Implemented Interfaces:
BaseUnivariateSolver<PolynomialFunction>, PolynomialSolver

public class LaguerreSolver
extends AbstractPolynomialSolver

Implements the Laguerre's Method for root finding of real coefficient polynomials. For reference, see A First Course in Numerical Analysis ISBN 048641454X, chapter 8. Laguerre's method is global in the sense that it can start with any initial approximation and be able to solve all roots from that point. The algorithm requires a bracketing condition.

Since:
1.2
Version:
$Id: LaguerreSolver.java 1296557 2012-03-03 02:07:07Z erans $

Nested Class Summary
private  class LaguerreSolver.ComplexSolver
          Class for searching all (complex) roots.
 
Field Summary
private  LaguerreSolver.ComplexSolver complexSolver
          Complex solver.
private static double DEFAULT_ABSOLUTE_ACCURACY
          Default absolute accuracy.
 
Constructor Summary
LaguerreSolver()
          Construct a solver with default accuracy (1e-6).
LaguerreSolver(double absoluteAccuracy)
          Construct a solver.
LaguerreSolver(double relativeAccuracy, double absoluteAccuracy)
          Construct a solver.
LaguerreSolver(double relativeAccuracy, double absoluteAccuracy, double functionValueAccuracy)
          Construct a solver.
 
Method Summary
 double doSolve()
          Method for implementing actual optimization algorithms in derived classes.
 double laguerre(double lo, double hi, double fLo, double fHi)
          Find a real root in the given interval.
 
Methods inherited from class org.apache.commons.math3.analysis.solvers.AbstractPolynomialSolver
getCoefficients, setup
 
Methods inherited from class org.apache.commons.math3.analysis.solvers.BaseAbstractUnivariateSolver
computeObjectiveValue, getAbsoluteAccuracy, getEvaluations, getFunctionValueAccuracy, getMax, getMaxEvaluations, getMin, getRelativeAccuracy, getStartValue, incrementEvaluationCount, isBracketing, isSequence, 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

complexSolver

private final LaguerreSolver.ComplexSolver complexSolver
Complex solver.

Constructor Detail

LaguerreSolver

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


LaguerreSolver

public LaguerreSolver(double absoluteAccuracy)
Construct a solver.

Parameters:
absoluteAccuracy - Absolute accuracy.

LaguerreSolver

public LaguerreSolver(double relativeAccuracy,
                      double absoluteAccuracy)
Construct a solver.

Parameters:
relativeAccuracy - Relative accuracy.
absoluteAccuracy - Absolute accuracy.

LaguerreSolver

public LaguerreSolver(double relativeAccuracy,
                      double absoluteAccuracy,
                      double functionValueAccuracy)
Construct a solver.

Parameters:
relativeAccuracy - Relative accuracy.
absoluteAccuracy - Absolute accuracy.
functionValueAccuracy - Function value accuracy.
Method Detail

doSolve

public double doSolve()
Method for implementing actual optimization algorithms in derived classes.

Specified by:
doSolve in class BaseAbstractUnivariateSolver<PolynomialFunction>
Returns:
the root.

laguerre

public double laguerre(double lo,
                       double hi,
                       double fLo,
                       double fHi)
Find a real root in the given interval. Despite the bracketing condition, the root returned by LaguerreSolver.ComplexSolver.solve(Complex[],Complex) may not be a real zero inside [min, max]. For example, p(x) = x3 + 1, with min = -2, max = 2, initial = 0. When it occurs, this code calls LaguerreSolver.ComplexSolver.solveAll(Complex[],Complex) in order to obtain all roots and picks up one real root.

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 point at which the function value is zero.


Copyright (c) 2003-2013 Apache Software Foundation