Re: Solve--Solutions
- To: mathgroup at yoda.physics.unc.edu
- Subject: Re: Solve--Solutions
- From: danl (Daniel Lichtblau)
- Date: Thu, 3 Mar 1994 09:44:34 -0600
I've explained this to several individuals. Here we (sob) go again, this time on MathGroup. Below is the bulk of the original post, with InputForm added for readability. >I found following not satisafying behavior of Mma: > (1) Find the zeroes of a third order polynomial: >In[1]:= Solve[ 11x^3 - 20 x^2 - 10x + 22 == 0, x] //N // InputForm >Out[1]//InputForm= > {{x -> -1.01566588029248938 + 3.19189119579732505*10^-16*I}, > {x -> 1.22065442639653776 + 0.*I}, > {x -> 1.61319327207776979 - 4.44089209850062616*10^-16*I}} >This solution is wrong. >It does not exist a complex solution. >(...) >Ok, you can get rid of the imaginary numbers by using Chop. But >anyway, you are interested in an analytic expression. (Without //N). >Can you trust it? Appearently no! Okay, let's put this goblin to rest for another few months. It is a classical result from algebra that a cubic polynomial with (real) integer coefficients can have roots that cannot be expressed in terms of radicals without using I==Sqrt[-1]. This is indeed the case for almost all such polynomials, in the sense of measure. For a reference, see Algebra, Vol 1, by Van der Waerden (p. 189 in my edition; I have a bookmark there, I've been asked about this so much). We at WRI have no intention of "disproving" this result (we also do not square circles, though we may indeed slay the occasional dragon). Once you get a mix of I inside radicals, N[] will not be able to discern that the imaginary part is in fact zero. >Everybody can construct polynomials with small imaginary parts >and therefore you are not sure if there are really complex >solutions. Not so. You have a cubic with all real coeffs, and N[] tells you that no pair of roots are complex conjugates. Hence you know for a certainty that all the roots are real. >What to do? >Forget about the analytic solution and use "brutal force": >In[2]:= NSolve[ 11x^3 - 20 x^2 - 10x + 22 == 0, x] // InputForm >Out[2]//InputForm= > {{x -> -1.0156658802924896}, {x -> 1.22065442639653753}, > {x -> 1.61319327207777041}} This is not a bad idea. What happens here is the equation is sent to NRoots (you could even call it directly, and save a bit of time). NRoots uses the Jenkins-Traub algorithm, and apparently can discern that all roots lie on the real axis. >But the worse thing is >(...) >that the Option VerifySolutions does not realize the wrong >solution. The solution in terms of radicals that is passed in to the verifier is correct. After verification, you hit it (the soln set) with N, and small complex quantities arise in the course of numerically approximating these radicals that involve I. Both the verifier and N[] are working as they should in this case. I hope this clears up a bit of the confusion about radical solutions to cubic and quartic polynomials. --Dan'L Daniel Lichtblau, WRI