Re: NSolve with varying parameter
- To: mathgroup at smc.vnet.net
- Subject: [mg18719] Re: [mg18692] NSolve with varying parameter
- From: Carl Woll <carlw at u.washington.edu>
- Date: Sat, 17 Jul 1999 02:36:40 -0400
- Organization: Physics Department, U of Washington
- References: <199907150546.BAA15972@smc.vnet.net.>
- Sender: owner-wri-mathgroup at wolfram.com
Dan, I think the simplest approach is to turn the problem into a differential equation and use NDSolve. For example, suppose you are trying to solve the equations x^2 + y^2 == a^2 y == x^2 for the parameter a in the range 0 to 1, and the output you want is interpolating functions for x and y as a function of a. Define In[42]:= f[a_, x_, y_] := x^2 + y^2 - a^2 g[a_, x_, y_] := y - x^2 Now, turn the problem into a differential equation. Do this by differentiating f[a,x[a],y[a]] and g[a,x[a],y[a]] with respect to a, and by supplying two initial conditions, say at a=1 (the choice a=0 doesn't work here because multiple solutions intersect at this point). In fact, it's easiest to let Mathematica do the above: In[60]:= NDSolve[{D[f[a,x[a],y[a]],a]==0,D[g[a,x[a],y[a]],a]==0,f[1,x[1],y[1]]==0, g[1,x[1],y[1]]==0},{x,y},{a,0,1}] Out[60]= {{x -> InterpolatingFunction[{{0., 1.}}, <>], y -> InterpolatingFunction[{{0., 1.}}, <>]}, {x -> InterpolatingFunction[{{0., 1.}}, <>], y -> InterpolatingFunction[{{0., 1.}}, <>]}, {x -> InterpolatingFunction[{{0., 1.}}, <>], y -> InterpolatingFunction[{{0., 1.}}, <>]}, {x -> InterpolatingFunction[{{0., 1.}}, <>], y -> InterpolatingFunction[{{0., 1.}}, <>]}} There are apparently four solutions to this particular problem, with the first two being imaginary and the last two real. I've plotted both f[a,x[a],y[a]] and g[a,x[a],y[a]] over the interval [0,1], and they are indeed zero. So, the above method should produce the interpolating functions you want, and in my opinion it's a pretty elegant method (said as I'm hurting my arm patting myself on the back). Good luck, and let me know if you have any problems. Carl Woll Physics Dept U of Washington Dr Dan wrote: > I have encountered a problem that I think is general enough that there > should be a built-in or standard package function, but I cannot find it. > > I have a set of algebraic equations in several variables (determined > system; #equations = #variables) and a single parameter. I need a > function that will numerically solve the system over an interval of > values for the parameter and return InterpolatingFunction's. The > syntax would be much like NDSolve, with the equations restricted to > algebraic only. > > For simple systems, I can use Solve to get explicit functions in the > parameter; but I cannot ensure that the equations in question will have > a closed form solution. > > I have written my own function to do this using NSolve and > NestWhileList, but I would certainly rather use a built-in if one > exists. > > Any suggestions? > > Sent via Deja.com http://www.deja.com/ > Share what you know. Learn what you don't. -- Carl Woll Dept of Physics U of Washington
- References:
- NSolve with varying parameter
- From: Dr Dan <drdanw@my-deja.com>
- NSolve with varying parameter