Re: FindRoot: Slight variation of usage
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg1730] Re: [mg1709] FindRoot: Slight variation of usage
- From: John Fultz <jfultz>
- Date: Fri, 21 Jul 1995 00:46:40 -0400
> Hi,
> I've got a quick question. I want to use FindRoot to find
> the root of a multi-variable function, e.g.
> f[x1_,x2_] := x2 + Cos[x1]
> for a _fixed_ value of the other variables (x2=constant) and
> find the root in the (only) remaining variable, x1. How should
> I do this for many different realizations of the other variables?
>
> Thanks,
> John
>
> P.S. As an aside, I wrote my own program that combines Newton-
> Raphson root finding with the bisection method to guarantee
> a root (provided it is bracketed) in the interval. FindRoot
> sometimes returned roots out of my xstart,xend domain. I am
> actually using this program in the above question, but thought
> the procedure would be the same.
>
> ________________________________________________________________________
> John D. Corless
> Institute of Optics (716) 275-8006 phone
> University of Rochester (716) 244-4936 fax
> Rochester, NY 14627 corless at optics.rochester.edu
> ________________________________________________________________________
Assuming that you have a prepared list of values, you could do something
like the following:
In[1]:= f[x1_,x2_] := x2 + Cos[x1] (* your function *)
In[2]:= l = {.5,.8,.95,1}; (* a sample list of numbers *)
In[3]:= g[x2_] := FindRoot[f[x1,x2] == 0, {x1, 1}] (* this function takes
the constant as its argument *)
In[4]:= Map[g,l] (* Now map it over your list *)
Out[4]= {{x1 -> 2.0944}, {x1 -> 2.49809}, {x1 -> 2.82403},
{x1 -> 3.14099}}
If you want to use multiple variables, then you could do:
In[5]:= f[x1_, x2_, x3_] := x3 + x2 * Cos[x1]
In[6]:= l={{.6,.3},{.5,.5},{.4,.2}}; (* list of constants in the
format {x2,x3} *)
In[7]:= g[{x2_,x3_}] := FindRoot[f[x1,x2,x3] == 0, {x1, 1}]
In[8]:= Map[g,l]
Out[8]= {{x1 -> 2.30052}, {x1 -> 3.14099}, {x1 -> 2.0944}}
John Fultz
Wolfram Research, Inc.