Re: Evaluate, Replace, and Hold

*To*: mathgroup at smc.vnet.net*Subject*: [mg77178] Re: Evaluate, Replace, and Hold*From*: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>*Date*: Tue, 5 Jun 2007 06:44:08 -0400 (EDT)*Organization*: The Open University, Milton Keynes, UK*References*: <f40gib$65a$1@smc.vnet.net>

grenander at gmail.com wrote: > This is a newbie question. I have a parametric form of a model and I > would like to evaluate it with different parameters on a list of > values. > > model = a x + b; > > Different sets of parameters: > > p1 = {a->1, b->0}; > p2 = {a->1, b->1}; > > x for which I'd like to evaluate the model: > > pts = Range[10]; > > I would like to define a function to evaluate the model at pts using > any of the sets of paramters: > > f[pts, p1] > f[pts, p2] > > I would also like it to work for single points: > > f[1, p1] > f[2, p1] > > I've tried various forms for a function definition that dont work. I > can do the following for a particular set of parameters: > > Function[{x}, Evaluate[model /. p1]] /@ pts > > but how can I turn it into a function of also the parameters. The > below doesn't work, for example: > > f[pts_, p_]:=Function[{x}, Evaluate[model /. p] ] /@ pts > > What I know is from descending the documentation tree (v6.0) starting > from the examples in FindFit. I have a fundamental misunderstanding of > replacement rules and delayed evaluation. > > Thanks. You may want to try something along the lines, In[1]:= model[x_] = a*x + b; p1 = {a -> 1, b -> 0}; p2 = {a -> 1, b -> 1}; pts = Range[10]; f[data_List /; VectorQ[data, NumberQ], params_List] := (model[#1] /. params & ) /@ data; f[(data_)?NumberQ, params_List] := (model[#1] /. params & )[data] f[pts, p1] f[pts, p2] f[1, p1] f[2, p2] Out[7]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} Out[8]= {2, 3, 4, 5, 6, 7, 8, 9, 10, 11} Out[9]= 1 Out[10]= 3 Hope this helps, Jean-Marc