Re: Solve transcendental functions
- To: mathgroup at smc.vnet.net
- Subject: [mg21192] Re: Solve transcendental functions
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Fri, 17 Dec 1999 01:24:02 -0500 (EST)
- Organization: Wolfram Research, Inc.
- References: <831v41$g3d@smc.vnet.net> <385558EC.CD39697C@wolfram.com> <Pine.LNX.4.10.9912142010060.20201-100000@carmen.imada.sdu.dk>
- Sender: owner-wri-mathgroup at wolfram.com
Niels Sandmann Pedersen wrote: > > > You can find solutions for particular values of a, provided you supply a > > starting point for a Newton-type iteration. > > > > f[x_,a_] := x^2-2Cos[a*x]/a > > parametrizedSolve[f_, a_?NumberQ, init_] := > > FindRoot[Evaluate[f[x,a]==D[f[x,a],x]], {x,init}, > > AccuracyGoal->15, WorkingPrecision->20] > > > > For example, if I want to handle the case where a is 1, starting near > > x=2, I can do as below. > > > > In[110]:= parametrizedSolve[f, 1, 2] > > Out[110]= {x -> 2.1999981850434100730} > > > thanks, it works very well. But what if I need all the solutions in an > interval, or maybe all solutions (if not infinite) ? > > -- > Mvh, Niels Sandmann It is not clear how you might obtain a continuum of solutions. For example, how would you represent such a set? What I suspect you want is a reasonable way to grab a specific solution x, given a specific value of a (for example, say to plot x vs a). Generating solutions "on the fly" with FindRoot may not be the best way to get this. In that case, I'd suggest generating several for different values of a in some interval, and then using an Interpolation to approximately reconstruct those in between. This will then give fast evaluation of x as a function of a. Below is code to do this for a in the interval {.1,2}. f[x_,a_] := x^2-2*Cos[a*x]/a parametrizedSolve[f_, a_?NumberQ, init_] := x /. FindRoot[Evaluate[f[x,a]==D[f[x,a],x]], {x,init}, AccuracyGoal->15, WorkingPrecision->20] data = Table[{a,parametrizedSolve[f,a,1]}, {a,1/10,2,1/10}]; func = Interpolation[data] To see visually what we have, you might compare Plot[func[a], {a,.1,2}] vs ListPlot[data] Note that your in general your function may be multivalued, and giving different starting values may generate different branches. Moreover, some caution is needed because the values generated by FindRoot may cause the interpolated function to cross branches In this case you'd likely notice a cusp in the plot or something to that effect. Daniel Lichtblau Wolfram Research