Re: Emergent Help: NSolve Problems!

*To*: mathgroup at smc.vnet.net*Subject*: [mg39791] Re: [mg39753] Emergent Help: NSolve Problems!*From*: Daniel Lichtblau <danl at wolfram.com>*Date*: Fri, 7 Mar 2003 03:39:09 -0500 (EST)*References*: <200303060735.CAA09182@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

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! > > PS: Please reply (cc) to my email. I did not subscribe my email to the > this email group! > > -- > Chengzhou You are only plugging in the first 6 significant digits of the actual solution, and error from this truncation is sufficiently large to make the residual appear big. temp[s_]=s^10+10 s^9+ 10 s^8 +10 s^7 +10 s^6+ 10 s^5 +10 s^4 +1; In[14]:= soln = NSolve[temp[s]==0, s]; In[15]:= InputForm[First[soln]] Out[15]//InputForm= {s -> -8.999981180131652} In[16]:= temp[-8.999981180131652] -7 Out[16]= -4.76837 10 If you plug in via rule replacement you do not risk this problem of inadvertantly truncating needed digits. In[17]:= InputForm[temp[s] /. soln] Out[17]//InputForm= {-4.76837158203125*^-7, 2.220446049250313*^-15, 2.581268532253489*^-15 - 1.5543122344752192*^-15*I, 2.581268532253489*^-15 + 1.5543122344752192*^-15*I, 1.8388068845354155*^-16 - 1.0234868508263162*^-16*I, 1.8388068845354155*^-16 + 1.0234868508263162*^-16*I, 1.968911145233676*^-16 - 2.2036409155767878*^-16*I, 1.968911145233676*^-16 + 2.2036409155767878*^-16*I, -8.770761894538737*^-15 + 7.549516567451064*^-15*I, -8.770761894538737*^-15 - 7.549516567451064*^-15*I} By the way, if you take into account the magnitude of that solution (around 10^1), the degree of the equation (10), magnitude of coefficient sizes (1 for lead, 10 for the rest), and the fact that the error is around the 7th digit, you can estimate that the error in residual computation may be as large as roughly 10^(-6)*10^10. So obtaining a residual around O(10^3) using the truncated solution is not surprising. Daniel Lichtblau Wolfram Research

**References**:**Emergent Help: NSolve Problems!***From:*Chengzhou Wang <wcz@ece.ucsd.edu>