Bound for the roots of a univariate polynomial

MuPAD® notebooks will be removed in a future release. Use MATLAB® live scripts instead.

MATLAB live scripts support most MuPAD functionality, though there are some differences. For more information, see Convert MuPAD Notebooks to MATLAB Live Scripts.




numeric::polyrootbound(p) returns a bound b, such that all real and complex roots z of the univariate polynomial p satisfy |z| ≤ b.

The coefficients of p may be real or complex numbers. Also exact numerical coefficients such as π, etc. are accepted if they can be converted to floats.

For non-zero constant polynomials, numeric::polyrootbound returns infinity.

For monomials p(x) = cnxn with n > 0, numeric::polyrootbound returns 0.0.

Consider the polynomial p(z) = zn + cn - 1zn - 1 + ··· + c0. If max(|cn - 1|, …, |c0|) > 0, the polynomial

has a single real root b > 0 which is an upper bound for the absolute values of all real and complex roots of p. The bound returned by numeric::polyrootbound(p) approximates b to about 3 leading decimal digits.

Environment Interactions

The function is sensitive to the environment variable DIGITS, which determines the numerical working precision.


Example 1

Both polynomial expressions as well as DOM_POLY objects may be used to specify the polynomial:

p := x^3 + PI*x - sqrt(2): numeric::polyrootbound(p)

p := poly(p, [x]): numeric::polyrootbound(p)

The absolute values of all real and complex roots of p are bounded by this number:


max(abs(z) $ z in %)

delete p:



A univariate polynomial expression or a univariate polynomial of domain type DOM_POLY.

Return Values

Nonnegative real floating-point number or infinity.