[Date Index]
[Thread Index]
[Author Index]
Re: Re: Bug in NSolve?
*To*: mathgroup at smc.vnet.net
*Subject*: [mg34002] Re: [mg33974] Re: Bug in NSolve?
*From*: Andrzej Kozlowski <andrzej at platon.c.u-tokyo.ac.jp>
*Date*: Fri, 26 Apr 2002 03:27:24 -0400 (EDT)
*Sender*: owner-wri-mathgroup at wolfram.com
On Thursday, April 25, 2002, at 03:59 PM, Rodger Rosenbaum 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?
First of all, as I wrote in my message, you have to look at the answer
in InputForm (or FullForm):
In[1]:=
NSolve[x^5-15 x^4+74 x^3-142 x^2+117 x-35,x,20]//InputForm
Out[1]//InputForm=
{{x -> 0.9999999999999999999`6.1651}, {x -> 1.`6.1651},
{x -> 5.`18.1471}, {x -> 7.`18.3392}}
Usisng the given precision Mathematica sees four distinct roots. It did
apply Union. Why it did not see that actually three roots (which are
really 1's) are equal? Of course it is because of the way it computes
them. (A trivial illusttration. Suppose you have a quadratic whose two
equal roots satisfy a + b== 2 , so they are both 1. If Mathematica
computes first a and makes an error of, say delta and then finds b from
b== 2-a than a and b may now be sufficiently far to be considered
distinct.)
> 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."
This is indeed the complete *set* of solutions, within this precision.
Note the word set, in mathematics this normally means that multiplicity
is not counted.
>
> 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.
>
>
>
>
This is not "further peculiar behaviour". Read my explanation again.
One reason why NSolve behaves the way it does is that getting correct
multiplicity in appraximate computations is tricky, particularly in the
multivariate case. I have been told this behaviour will be changed in
the future, but in any case, the answer you get will always only be
correct to within the given precision. In other words, Mathematica will
tell you that you have a double root when you in fact have two distinct
rots very close together, or, when you have a double root it may tell
you you have two distinct ones, unless you use sufficient precision.
To get accurate multiplicity you must use Solve:
In[4]:=
Solve[x^5-15 x^4+74 x^3-142 x^2+117 x-35\==0,x]//InputForm
Out[4]//InputForm=
{{x -> 1}, {x -> 1}, {x -> 1}, {x -> 5}, {x -> 7}}
Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/
Prev by Date:
**Re: Pattern matching**
Next by Date:
**Re: Re: Pattern matching**
Previous by thread:
**Re: Bug in NSolve?**
Next by thread:
**animations in mathematica**
| |