Re: Bug in NSolve?

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

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

>Andrzej Kozlowski <andrzej at tuins.ac.jp> 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.
><snipped>
>> 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.

and

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?