next up previous contents
Next: Example Up: Solving univariate polynomial with Previous: Mathematical background   Contents

Implementation

The algorithm we have implemented is a direct derivation of the general purpose solving algorithm with Jacobian and Hessian in which these values are automatically derived. To isolate the roots we use the Kantorovitch theorem (which may also optionally be used during the resolution, see section 3.1.2). To eliminate boxes during the bisection process we use the safe Budan-Fourier method (see section 5.5.2).
 
int Solve_UP_JH_Interval(int Degree,VECTOR Coeff, 
            INTERVAL & TheDomain, 
            int Order,int M,int Stop,
            double epsilon,double epsilonf,
            INTERVAL_VECTOR & Solution,
            INTEGER_VECTOR & IsKanto,int NbSolution);
with: The procedure will return the number of solution(s) or -3 if the order is not 0 or 1, -2 if the number of equations or unknowns is equal or lower to 0 and -1 if the number of iteration is too low. There is an alternate form of this procedure in the case where we are looking for all the roots of the polynomial.
 
int Solve_UP_JH_Interval(int Degree,VECTOR Coeff,
            int Order,int M,int Stop,
            double epsilon,double epsilonf,
            INTERVAL_VECTOR & Solution,
            INTEGER_VECTOR & Is_Kanto,int NbSolution);
There are two alternate forms of this procedure in the case where we are looking for the positive or negative roots of the polynomial.
 
int Solve_UP_JH_Positive_Interval
int Solve_UP_JH_Negative_Interval
In the three previous procedures there is no TestDomain as it is automatically determined by the procedure. If there was a failure in the determination of the domain (for the reasons explained in section 5.2) the procedures will return -1.

The previous procedures are numerically safe in the sense that we take into account rounding errors in the evaluation of the polynomial and its gradient. For well conditioned polynomials you may use faster procedures whose name has the prefix Fast. For example Fast_Solve_UP_JH_Interval is the general procedure for finding the roots of a polynomial.

Clearly this procedure is not intended to be used as substitute to more classical algorithms.

It makes use of a specific Krawczyk procedure for polynomials:

 
int Krawczyk_UP(int Degree,INTERVAL_VECTOR &Coeff, 
             INTERVAL_VECTOR &CoeffG,INTERVAL &Input)



Subsections
next up previous contents
Next: Example Up: Solving univariate polynomial with Previous: Mathematical background   Contents
Jean-Pierre Merlet 2012-12-20