Thank you very much (Emergent Help: NSolve Problems!)

*To*: mathgroup at smc.vnet.net*Subject*: [mg39838] Thank you very much (Emergent Help: NSolve Problems!)*From*: Chengzhou Wang <wcz at ece.ucsd.edu>*Date*: Sat, 8 Mar 2003 02:50:13 -0500 (EST)*Sender*: owner-wri-mathgroup at wolfram.com

Hi, Thank you very much for your kind replies. I am so impressed that I got so many warm-hearted replies right after I sent the email to this email group. Now I am clear for this problem, which is quite important for my research. I am really indebted to you guys. Thanks again! Have a good time! -- Chengzhou On Thu, 6 Mar 2003, Daniel Lichtblau wrote: > 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 >