Let be a univariate polynomial of degree with real coefficients. By isolating the roots of we mean computing rational numbers , that approximate its exact real and complex roots, and positive numbers that give some estimates of the accuracies.
For a square-free polynomial:
1. get an approximate of by dumping its coefficients;
2. compute some approximates of the roots (using, for instance, Maple function fsolve);
3. for each , compute an estimate for the distance to the
nearest root of :
- compute
(see [Strzebonski, 97)]) using erna arithmetic;
- set
to the sum of the absolute value of the dump of
and its accuracy;
4. test the discs of centers and radii for intersections; if any two discs intersect, refine the polynomial and repeat from step 2;
5. report the list of pairs .
In Step 4 from above, the decision is based on the knowledge that the polynomial is square-free: after a few steps of refining the approximations of the roots, their discs will contain only one exact root, and eventually they get disjoint.
Creating an erna object for the root of a polynomial
The initial approximation of the root must be provided (it can be computed using sqFreePolRootsIsol). The method that gives better approximates is described in the following:
1. get a dump of the polynomial, and of its first derivative;
2. apply a Newton step to compute another value of the root, , from the known value, ;
3. compute the distance to the nearest exact root, using the same formula as before;
4. if this distance is greater than the tenth part of the accuracy of the known approximation, then refine the polynomial, its derivative, and go to step 2;
5. report .