Re: Change in NSolve algorithm
- To: mathgroup at smc.vnet.net
- Subject: [mg98537] Re: Change in NSolve algorithm
- From: Szabolcs <szhorvat at gmail.com>
- Date: Sun, 12 Apr 2009 03:46:22 -0400 (EDT)
- References: <grpif7$lnr$1@smc.vnet.net>
On Apr 11, 10:56 am, mark mcclure <mcmcc... at unca.edu> wrote:
> Has anyone noticed that the algorithm used by NSolve has
> changed in V7? I think the change is mostly for the better,
> but not exclusively. To see the change, enter the following
> in both V7 (7.0.0 or 7.0.1) and any version < 7.0:
> Abs[sols = z /. NSolve[z^200 == 1, z]]
>
> In V7, Mathematica correctly generates a list of 1.0s. In
> versions prior to V7, numerical error creeps in so you get
> numbers ranging from 0.004 to 2.55. V7 is noticeably faster,
> too. To visualize the error in V6, you can enter
> ListPlot[{Re[#], Im[#]} & /@ sols,
> AspectRatio -> Automatic]
>
> Of course, you should get a circle.
>
> On the other hand, V7 fares slightly worse with Wilkinson's
> polynomial:
> sols = x/.NSolve[Expand[Product[x-i, {i,1,20}] == 0,x]];
> Norm[Table[sols[[i]] - i, {i, 1, 20}]]
>
> I get 0.087351 from V6 and 0.26578 in V7. Also, V6 returns
> all real solutions, while V7 returns some complex.
>
> Of course, the change is platform independent. I haven't
> played with it extensively, but I think this is probably a
> net big improvement.
>
Thank you, Mark, for this little demonstration!
For the people reading this post and wondering about whether
Mathematica can find more accurate solutions to those equations: using
the WorkingPrecision option with a non-machine-precision setting will
usually improve the results (but the computation will take longer).