MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Bug in NSolve?

  • To: mathgroup at
  • Subject: [mg33974] Re: Bug in NSolve?
  • From: Rodger Rosenbaum <rodgerroSPAMNOT at>
  • Date: Thu, 25 Apr 2002 02:59:45 -0400 (EDT)
  • References: <a9oe60$d9r$> <a9r3eo$lrg$>
  • Sender: owner-wri-mathgroup at

On Sat, 20 Apr 2002 06:56:24 +0000 (UTC), lalu_bhatt at (Bhuvanesh) wrote:

>Andrzej Kozlowski <andrzej at> wrote:
>> Unlike Solve, NSolve  returns only one root when it finds multiple roots 
>> it considers to be sufficiently close to be identical. In fact it seems 
>> that it applies Union to the final result. So when you use more 
>> precision the roots which were considered as distinct due to possible 
>> error become identified and appear only once.
>> Why do Solve and NSolve behave differently here? Well, it seems to me 
>> that it is probably a matter of "philosophy". Solve is basically an 
>> "algebraic function" and from the algebraic point of view the 
>> multiplicity of roots is an important property of a solution. But most 
>> people looking for numerical solutions would be I think inclined to 
>> consider multiple roots as "the same".
>But there should be two solutions, right? Solve returns:
>In[1]:= Solve[4877361379 x^2 -9754525226 x + 4877163849==0,x]
>               4877262613 - I Sqrt[2]         4877262613 + I Sqrt[2]
>Out[1]= {{x -> ----------------------}, {x -> ----------------------}}
>                     4877361379                     4877361379
>The two solutions *are* close, as you wrote.

Andrzej Kozlowski suggests that when there is a root of multiplicity greater than 1, we
should not be surprised if Mathematica only reports one root.  In his examples, we can
determine the multiplicity by inspection; but suppose we had a polynomial of relatively
high order, say fifth degree, with, say, 2 distinct roots, and 1 of multiplicity 3, e.g.: 

NSolve[x^5 - 15 x^4 + 74 x^3 - 142 x^2 + 117 x - 35,x,20]

Mathematica gives:
 {{ x--> 1.000000},{ x--> 1.000000},{ x--> 5.00000000000000000},{x-->7.00000000000000000}}

What am I to make of this?  Why didn't Mathematica form the Union of the three identical
roots and only show one?  Can I be sure that the root, 5, doesn't have multiplicity
greater than one?  The lesser precision of the two roots, 1, implies higher multiplicity
than the roots, 5 and 7, but but can I rely on such an inference?  And there is that claim
in the Mathematica Book:

"NSolve will always give you the complete set of numerical solutions to any
polynomial equation in one variable."

And here is some further peculiar behavior; try:

NSolve[x^3 - 3 x^2 + 3 x - 1,x,20]

NSolve[x^4 - 4 x^3 + 6 x^2 - 4 x + 1,x,20]

These give two roots of unity, but if you remove the third argument (the 20), then they
give 3 and 4 roots of unity, respectively. Make the third argument in the cubic 25, and
get three roots of unity; make the third argument 200 and get only two roots.


NSolve[x^5 - 5 x^4 + 10 x^3 - 10 x^2 + 5 x - 1,x,20]

This gives 4 roots of unity; make the third argument 25 and get only 3 roots.  Make the
third argument 200, or 10000, and get two roots.

  • Prev by Date: RE: Re: Pattern matching
  • Next by Date: help read file
  • Previous by thread: Re: Bug in NSolve?
  • Next by thread: Re: Re: Bug in NSolve?