Re: Emergent Help: NSolve Problems!
- To: mathgroup at smc.vnet.net
- Subject: [mg39787] Re: [mg39753] Emergent Help: NSolve Problems!
- From: Sseziwa Mukasa <mukasa at jeol.com>
- Date: Fri, 7 Mar 2003 03:32:05 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
On Thursday, March 6, 2003, at 02:35 AM, Chengzhou Wang wrote:
> Hi, guys
>
> I have some complicated polynomials, and I want to calculate its roots.
> HOwever, when I use NSolve, it creates some problems. Say a simple
> example:
>
> temp[s_]=s^10+10 s^9+ 10 s^8 +10 s^7 +10 s^6+ 10 s^5 +10 s^4 +1;
> NSolve[temp[s]==0, s]
>
> It will give:
>
> Out[4]= {{s -> -8.99998}, {s -> -1.06539}, {s -> -0.468828 - 0.886239
> I},
>
>> {s -> -0.468828 + 0.886239 I}, {s -> -0.409684 - 0.469948 I},
>
>> {s -> -0.409684 + 0.469948 I}, {s -> 0.401048 - 0.312597 I},
>
>> {s -> 0.401048 + 0.312597 I}, {s -> 0.51015 - 0.878693 I},
>
>> {s -> 0.51015 + 0.878693 I}}
>
> But when I plug in the first number, which is "-8.99998", it should
> give a
> value close to zero. However, it gives:
>
> In[5]:= temp[-8.99998]
> Out[5]= -411.473
>
> The other roots seems OK. Does anyone know why? This is just a simple
> example. I have some more complicated polynomials to deal with.
>
> Thanks in advance!
>
>
You are running into machine precisions problems, the output formatting
that Mathematica does means that {s->-8.99998} does not necessarily
equal the value when you enter -8.99998. If you save the result from
NSolve and use Replace you'll get:
In[91]:=
f[s_]:=s^10+10 s^9+ 10 s^8 +10 s^7 +10 s^6+ 10 s^5 +10 s^4 +1
sols=NSolve[f[s]==0,s]
f[s]/.sols
Out[92]=
{{s->-8.99998},{s->-1.06539},{s->-0.468828-0.886239
I},{s->-0.468828+0.886239
I},{s->-0.409684-0.469948
I},{s->-0.409684+0.469948 I},{s->0.401048
-0.312597
I},{s->0.401048+0.312597 I},{s
->0.51015-0.878693 I},{s->0.51015
+0.878693 I}}
Out[93]=
({-9.5367431640625`*^-7, -2.886579864025407`*^-15,
7.216449660063518`*^-16 + 1.7763568394002505`*^-15 I,
7.216449660063518`*^-16 - 1.7763568394002505`*^-15 I,
1.682681771697503`*^-16 + 1.214306433183765`*^-16 I,
1.682681771697503`*^-16 -
1.214306433183765`*^-16 I, -2.398255205537936`*^-16 +
3.3832528792410166`*^-16 I, -2.398255205537936`*^-16 -
3.3832528792410166`*^-16 I, -5.218048215738236`*^-15 +
4.218847493575595`*^-15 I, -5.218048215738236`*^-15 -
4.218847493575595`*^-15 I}
If you want to see more digits in the result from NSolce use
NSolve[f[s]==0,s,n] where n is the number of digits you wish to use.
At any rate you are probably going to have problems with machine
precision values if you work with polynomials of high degree.
Regards,
Ssezi