Re: Two FindRoot questions
- To: mathgroup at smc.vnet.net
- Subject: [mg89904] Re: Two FindRoot questions
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Tue, 24 Jun 2008 03:28:12 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <g3nha1$f9$1@smc.vnet.net>
Aaron Fude wrote:
> These are not FindRoot questions, per se...
You will find below a possible approach to your problem(s) that does not
use FindRoot and only plots the points for which the function has a real
root.
> Here's a simple example which I want to ask three questions about:
>
> f[k_] := x /. FindRoot[x^2 + k, {x, 0, 10}];
> f[-10]
> Plot[f[k], {k, -10, 10}]
>
> First, I want the plot to only show where there exists a root.
> Is the right solution to make f[] return Null?
> How do I make f[] return Null? (Is there a way to "catch" the
> warnings?)
>
> Finally, I need to solve my equations to 20 digits. How do I do that?
> I've read about Accuracy and Precision but it didn't help.
f[k_] := First[Cases[x /. Solve[x^2 + k == 0, x],
(x_)?NonNegative /; x <= 10] /. {} -> {None}]
pts = Table[{k, f[k]}, {k, -10, 10}];
ListPlot[pts, Filling -> Axis]
N[#1, 20] & /@ pts // DeleteCases[#1, {_, None}] &
Cases[pts, {x_, (y_)?NumericQ} :> (N[#1, 20] & ) /@ {x, y}]
{{-10.0000000000000000000,
3.1622776601683793320}, {-9.0000000000000000000,
3.0000000000000000000}, {-8.0000000000000000000,
2.8284271247461900976}, {-7.0000000000000000000,
2.6457513110645905905}, {-6.0000000000000000000,
2.4494897427831780982}, {-5.0000000000000000000,
2.2360679774997896964}, {-4.0000000000000000000,
2.0000000000000000000}, {-3.0000000000000000000,
1.7320508075688772935}, {-2.0000000000000000000,
1.4142135623730950488}, {-1.00000000000000000000,
1.00000000000000000000}, {0, 0}}
Regards,
-- Jean-Marc