isolate the real roots of a univariate polynomial or polynomial system
Univariate polynomials with irrational coefficients
Isolate(f, X, digits=d, constraints=icons, output=outpt, maxroots=mxrts, method=mthd)
Isolate(g, X, digits=d, constraints=rcons, output=outpt, maxroots=mxrts, method=ABND, maxprec=mxprc, partialresults=partial)
Isolate(J, X, digits=d, constraints=icons, output=outpt, maxroots=mxrts, method=mthd)
univariate polynomial with real-valued numeric coefficients
univariate polynomial with real-valued coefficients
set or list of polynomials, or a PolynomialIdeal
(optional) list of variables
(optional) positive integer; number of significant digits (default: Digits)
(optional) list of polynomials with integer coefficients
(optional) list of polynomials with real coefficients
(optional) type of output: numeric (default), midpoint, or interval
(optional) maximum number of roots to be returned. Default is ∞.
(optional) name of algorithm to use: ABND, RS or RC. Default is ABND for univariate and RS for multivariate inputs.
(optional) maximum internal working precision. Default is ∞ for numeric coefficients, otherwise see the description of the option below.
(optional) return regions that could not be completely decided: true or false (default).
The digits=d option controls the output precision.
In the case of numeric coefficients, the isolating intervals have a relative diameter of at most 10−d. That is, if the result is evaluated numerically, the resulting floating point mantissae have d digits and an error of at most 0.6 units in the last place. Note that this does not necessarily mean that the preceding digits are correct; e.g., an exact value of 57512500 could be represented with the interval 2.299,2.301 at digits=4. In particular, isolating intervals corresponding to a root of magnitude larger than 10d may have a width larger than 1; even if the exact root is an integer, the midpoint does not necessarily round to this value.
For non-numeric coefficients, it might not be possible to decide if the trailing coefficient vanishes or, equivalently, whether 0 is an exact root. In this situation, the isolating interval for the near-0 root will be of absolute diameter of at most 10−d and contain 0, and neither of the output formats midpoint or numeric (see below) will help to determine the sign of the root; for closer inspection, use the output format interval.
The output option specifies the format of the output, and can be one of interval, midpoint, or numeric (the default). output=interval returns a list of intervals with rational endpoints, each containing a root. The intervals are open, unless an exact root is found; in this situation, both endpoints are identical. output=midpoint computes the midpoint of each interval exactly, so that a list of rational approximations is returned. output=numeric evaluates the midpoints numerically at the desired precision d, resulting in a list of floating point approximations.
The constraints option takes a list of polynomials with real-valued coefficients and evaluates them at the roots of the system. This option is more reliable than direct evaluation using evalf because of two reasons: (1) A smaller numerical error is introduced, and (2) the results are certified in the sense that the exact value of the constraint at the exact root will always be contained in the interval returned by this option. In contrast, evaluation via evalf can be subject to round-off errors and cancellation.
The maxroots option specifies the maximum number of roots to be returned. If the polynomials have fewer roots than maxroots, this setting is ignored. Note that this option does not guarantee any particular roots to be returned.
This option cannot be used in conjunction with method=RC. If both method=RC and maxroots are given, method is silently ignored.
The method option specifies the algorithm to use. It can be ABND (default for the univariate case), RS (default for the multivariate case) or RC. method=RS uses the RealSolving (RS) C library by F. Rouillier et al. method=RC computes the result by using the RegularChains package by M. Moreno Maza et al.
method=ABND uses the Approximate Bitstream Newton-Descartes method by A. Kobel et al., which is based on the univariate components of RS. The ABND variant gives improved complexity guarantees and significantly improved performance for high accuracy requests, whereas RS' performance tends to be better for well-conditioned instances of small input size and accuracy demand.
The constraints and maxroots options cannot be used simultaneously with method=RC. If both method=RC and constraints or maxroots are specified, Isolate carries out the computation using method=ABND (univariate case) or method=RS (multivariate case).
The maxprec and partialresults options can only be used with method=ABND (and univariate inputs). If maxprec or partialresults is given, the choice of method is ignored.
For multivariate polynomial systems, when method=RS is specified, Isolate first computes a Groebner basis followed by a Rational Univariate Representation. The second argument must be an ordered list of variables, and the roots are returned as corresponding lists of values.
The maxprec option specifies the maximum internal working precision of the root solver. The numerical solver works in stages of gradually increasing precision; when a new stage begins, the computation is interrupted if the new precision would exceed the given value.
The unprocessed intermediate results can be inspected with the partialresults option (see below).
If an interval can be proven to be isolating within the maxprec constraints, but cannot be refined to the accuracy requested through the digits option, it will nevertheless be reported in the default output even if partialresults is not given.
This option can only be used in conjunction with method=ABND (and, thus, univariate polynomials). If maxprec is specified, the choice of method is silently ignored.
If partialresults=true, a list of intervals that have not been fully processed within the limits of maxroots or maxprec is returned as a second (or third) return value. Each item of the list is a record with two fields, named interval and multiplicity. The interval entry contains an interval with dyadic endpoints, and the multiplicity entry contains a certified estimate of the possible number of distinct roots of g in the corresponding interval, given as a range.
This option can only be used in conjunction with method=ABND (and, thus, univariate polynomials). If partialresults is specified, the choice of method is silently ignored.
The RootFinding[Isolate] command isolates the real roots of univariate polynomials and polynomial systems with a finite number of solutions. By default it computes isolating intervals for each of the roots and numerically evaluates the midpoints of those intervals at the current setting of Digits. If possible, the intervals are refined such that the numerical evaluation is accurate up to 0.6 units in the last place; see the digits option for details.
Unlike purely numerical methods no roots are ever lost, although repeated roots are discarded. This command does not support parametric or complex number coefficients.
For a polynomial with numeric coefficients (that is, all coefficients are of type integer, fraction or float), all real roots will be given in the output (unless specifically requested otherwise, see the maxroots and maxprec options).
Polynomials with irrational coefficients are only supported in the univariate case, and only with method=ABND (see below). For such inputs, complete and certified root isolation is infeasible for sufficiently general instances, and Isolate returns a best-effort output according to the specification in the corresponding section.
The system must have a finite number of complex solutions; otherwise, Isolate will return an error.
This function is part of the RootFinding package, and can be used in the form Isolate(..) only after executing the command with(RootFinding). However, it can always be accessed through the long form of the command using RootFinding[Isolate](..).
Irrational coefficient support for univariate polynomials is provided with method=ABND. If non-numeric coefficients are given, the choice of method is silently ignored and the ABND algorithm is used. If irrational polynomials are passed to RootFinding[Isolate], the user is required to take proper precautions for dealing with possibly incomplete output; see the description of the maxprec and partialresults options above.
In full generality, root isolation for arbitrary polynomials is infeasible: a purely numerical routine can eventually isolate simple roots, but cannot detect multiple roots. A square-free decomposition is required, but this cannot be performed in all situations. A notable exception are polynomials with numeric coefficients, where such a decomposition is done implicitly if required.
Instead, the ANBD root solver tries a best-effort isolation up to a certain maximum internal working precision maxprec. If the instance could not be conclusively handled within that precision constraint, a partial output is given. It contains (1) a list of proven isolating intervals, (2) a list of the constraint polynomials (if applicable, i.e., if constraints is not empty) evaluated at those isolating intervals, and (3) a list of unresolved intervals (if partialresults=true; see the description of the option above).
There is no general way to determine the "right" value of maxprec a priori. For numeric instances, the default maximum precision is virtually infinity; such instances can always be dealt with in a complete manner. For non-numeric instances, the default is chosen purely heuristically, as a function of the value of the Digits environment variable, the digits option, and the degree n of the polynomial g: maxprec defaults to max⁡Digits,4⁢d,8⁢n⁢log2⁡n. Under typical circumstances, the default value allows to isolate and refine well-separated roots of g up to the requested accuracy of d digits, but there is no guarantee.
A special situation arises in the case g is a numeric polynomial, but some or all constraints are non-numeric. Under such circumstances, a user-given value maxprec is enforced throughout the entire computation, but a heuristic default of maxprec is applied only to non-numeric constraint evaluation. In particular, an important use case for constraints is to check whether any constraint polynomial might be zero at a root of g.
If g is a numeric polynomial, the default is to fully isolate the roots of g up to an accuracy of d digits, and to enforce the evaluation of numeric constraints up to d significant digits. In particular, the interval evaluation of a numeric constraint will be 0,0 if and only if the constraint vanishes at the corresponding root of g; otherwise, all interval evaluations of numeric constraints will not contain 0.
Similar guarantees cannot be made if the constraint is non-numeric. In this situation, the numeric sub-instances will be solved according to the above rules, and the remaining non-numeric sub-instances will be subject to the maxprec heuristic.
A multivariate system.
Specify the maximum number of roots returned by using the maxroots option.
An example with ill-conditioned constraints.
Slightly shift a coefficient:
This agrees with higher precision results:
Compare this result to direct evaluation:
Isolate can find roots of polynomials with irrational coefficients as well.
In case of multiple or near-multiple roots, this is infeasible in general; in the following example, without symbolic simplification, a purely numerical routine cannot infer the fact that there is a double root at 2:
Inspecting the partial results will reveal such instances:
If it is a priori known that the input is indeed square-free, increasing the maximum precision allows to resolve such situations:
Not that a is very close to 2, but not identical.
Note that the polynomial x2−2⁢x−a has no irrational coefficients, but only such of type numeric (which comprises floats); thus, the following call defaults to complete isolation:
The maxprec mechanism can also be used to limit the computational resources if an incomplete or approximate answer is acceptable. The following polynomial has two well-separated simple roots of absolute value close to 110, but also two simple roots extremely close to 10−100. For the latter two, approximately 50000 digits of accuracy are required to distinguish them:
Despite the fact that it is feasible to fully isolate the roots in this example, such partial results might be sufficient for numerical applications.
Finally, we consider a harder multivariate system with infinitely many complex solutions. The input is given as a PolynomialIdeal so that the Groebner basis computed by Isolate is remembered.
Error, (in RootFinding:-Isolate) the system has an infinite number of solutions
The basis is remembered:
Rouillier, F. "Solving zero-dimensional systems through the rational univariate representation." Journal of Applicable Algebra in Engineering, Communication, and Computing, Vol. 9, No. 5 (1999): 433-461.
Rouillier, F. and Zimmermann, P. "Efficient isolation of polynomial real roots." Journal of Computational and Applied Mathematics, Vol. 162 No. 1 (2003):33-50.
Aubry, P., Lazard, D., and Moreno Maza, M. "On the theories of triangular sets." J. of Symb. Comput., Vol. 28, No. 1-2 (1999): 105-124.
Xia, B. and Yang, L. "An Algorithm for Isolating the Real Solutions of Semi-algebraic Systems." J. of Symb. Comput. , Vol. 34, No. 5 (2002): 461-477.
Kobel, A. and Sagraloff, M. and Rouillier, F. "Computing Real Roots of Real Polynomials ... And now For Real!" Proceedings of the 41st International Symposium on Symbolic and Algebraic Computation (ISSAC) (2016):303-310.
The maxroots option was introduced in Maple 15.
For more information on Maple 15 changes, see Updates in Maple 15.
The method=ABND, maxprec and partialresults options were introduced in Maple 2019.
For more information on Maple 2019 changes, see Updates in Maple 2019.
Download Help Document
What kind of issue would you like to report? (Optional)