Re: NSolve vs. N[Solve ]
- To: mathgroup at smc.vnet.net
- Subject: [mg103446] Re: [mg103423] NSolve vs. N[Solve ]
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Mon, 21 Sep 2009 19:28:11 -0400 (EDT)
- References: <200909210951.FAA04712@smc.vnet.net>
This is not quite right. NSolve is primarily meant for polynomial and algebraic equations and when you give it an algebraic equation it will behave as advertised: x /. NSolve[x^3 - 3 x^2 - 2 x - 11 == 0, x, 3] // Precision 3. x /. NSolve[x^3 - 3 x^2 - 2 x - 11 == 0, x, WorkingPrecision -> 3] // Precision 3. I believe that in the first of the above inputs NSolve actually seeks an answer with precision 3, while in the second case it uses WorkingPrecision 3, so the final answer may well have a lower precision. (At least this is how I imagine this ought to work, I can't remember anymore if this is indeed so and I do not have the time to experiment). Now, in your case you have a transcendental equation Exp[x]==10 I think that in this sort of situation NSolve does not have any methods of its own that it can use. I believe that it simply asks Solve for the answer (which is Log[10], with a warning about inverse functions being used) and then it just applies N to the answer it gets from Solve. In doing so it simply ignores the precision you asked for. This is probably an oversight rather than a bug. Of course the best thing to do in such cases is to use N[Solve[Exp[x] == 10, x], 3], since really there is absolutely no benefit at all of using NSolve unless you are trying to solve an equation on which special methods that NSolve is able to use can be used. In other cases NSolve will just turn to Solve for the answer so you might as well tell your students to do that directly. (I assume they can tell a polynomial equation from a transcendental one. If not, its something worth explaining.) Andrzej Kozlowski On 21 Sep 2009, at 18:51, Helen Read wrote: > A while back (I forget what version), N was modified so that it will > give output to any number of significant digits that you desire. > Previously, N[x,k] would output 6 significant digits if k was anything > less than machine precision. Asking for N[x,3] or N[x,15] or whatever > would give output to 6 significant digits, while N[x,k] for k>=16 > would > give x to k significant digits. > > Lately my students have been using NSolve with a third argument (for > the > precision) -- which I hadn't told them about -- to solve a problem > that > I was actually expecting them to do a different way. What they did > was a > reasonable solution, but unfortunately they didn't notice that their > results from NSolve were not coming out to the number of significant > digits that they asked for. Evidently NSolve behaves like the old N, > and > differs from N[Solve ] > > For example, compare these: > > NSolve[E^x==10,x,3] (* result given to 6 significant digits, despite > asking for only 3 *) > > N[Solve[E^x==10,x],3] (* result given to the desired precision *) > > NSolve[E^x == 10, x, 12] (* result given to only 6 significant > digits, > despite asking for 12 *) > > N[Solve[E^x==10,x],12] (* result given to the desired precision *) > > I hadn't noticed this unfortunate behavior until I started seeing it > in > my students' work. > > -- > Helen Read > University of Vermont >
- References:
- NSolve vs. N[Solve ]
- From: Helen Read <hpr@together.net>
- NSolve vs. N[Solve ]