Texas Instruments TI-89 Tip List page 282

Graphing calculator
Hide thumbs Also See for TI-89:
Table of Contents

Advertisement

15504x 5 + 4845x 4 + 1140x 3 + 190x 2 + 20x + 1
Obviously, there are 20 repeated roots of -1, but proots() returns (approximately) these roots in about
100 seconds:
-1.49339 ± 0.102038i
-1.40133 ± 0.280223i
-1.24788 ± 0.388669i
-1.08333 ± 0.41496i
-0.945259 ± 0.38717i
If we substitute these roots in the original polynomial, we get 20 complex results near zero, but proots()
has returned 10 complex root pairs, instead of the expected 20 real results. In about the same 100
seconds, polyroot() (Laguerre's method) returns the correct roots as a list of twenty 1's. The results
from proots() are disturbed from the correct solutions by round-off error in calculating the eigenvalues
of a 20 x 20 element matrix.
TI offers a flash application, Polynomial Root Finder, (I'll call it TI PRF) which also uses this eigenvalue
method according to its PDF documentation. TI PRF also fails in a rather spectacular fashion with the
20-degree polynomial above, but with different results than proots(). The flash application returns two
real roots of about -1.49821 and -0.869716, and 9 complex conjugate pairs. If these roots are
evaluated in the polynomial, we again get real and complex results that are in the vicinity of zero. The
magnitudes range from about 1E-6 to 2E-10.
The real drawback to these eigenvalue methods is that they give no estimate for the root errors, and no
warning that the roots are wrong. Since we usually do not know in advance what the roots are, we
might be led to believe that the returned roots were correct. The main advantage to polyroot() is that it
attempts to find the roots to meet an error criteria, and, if it cannot, it returns an error message instead
of a wrong solution.
Comments
This procedure can be used to find polynomial roots with a fair degree of success:
1. First, try solve() or csolve() (or zeros() or czeros()) to find the roots. If they work, they will be
faster than polyroot(), and they can find some complex solutions which polyroot() cannot.
2. Check the solutions with the sign test method (proot_t1()), or by creating the original
polynomial with the roots, or just by evaluating y(x) at each root. You can also plot the
polynomial in the vicinity of the roots for additional assurance.
3. If the tests in step 2 fail, try proots() and repeat the tests.
4. If proots() fails, try polyroots().
The limited floating-point resolution can result in an effect called destructive cancellation, the symptom
of which is that the polynomial may not be strictly monotonic (increasing or decreasing) over a very
narrow range of x. For this reason, the sign test is not always conclusive. Plotting f(x) - f(xc), where xc
is a point in the center of the x-range, may help indicate this problem.
Solving polynomials is not trivial, particularly when the polynomial is ill-conditioned, and polynomials
with multiple identical roots are always ill-conditioned. An ill-conditioned polynomial has a large
dynamic range of coefficients, and the coefficient signs alternate. Forman S. Acton (reference below),
has this to say about polynomial-solving systems in general:
-0.848193 ± 0.295003i
-0.843498 ± 0.25989i
-0.750275 ± 0.212911i
-0.703918 ± 0.130283i
-0.682926 ± 0.043651i
6 - 124

Hide quick links:

Advertisement

Table of Contents
loading

This manual is also suitable for:

Ti-92+

Table of Contents