Class 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
    • 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

      • laguerre

        @Deprecated
        public double laguerre​(double lo,
                               double hi,
                               double fLo,
                               double fHi)
        Deprecated.
        This method should not be part of the public API: It will be made private in version 4.0.
        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.
      • solveAllComplex

        public Complex[] solveAllComplex​(double[] coefficients,
                                         double initial,
                                         int maxEval)
                                  throws NullArgumentException,
                                         NoDataException,
                                         TooManyEvaluationsException
        Find all complex roots for the polynomial with the given coefficients, starting from the given initial value.

        Note: This method is not part of the API of BaseUnivariateSolver.

        Parameters:
        coefficients - polynomial coefficients
        initial - start value
        maxEval - maximum number of evaluations
        Returns:
        the full set of complex roots of the polynomial
        Throws:
        TooManyEvaluationsException - if the maximum number of evaluations is exceeded when solving for one of the roots
        NullArgumentException - if the coefficients is null
        NoDataException - if the coefficients array is empty
        Since:
        3.5