Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2007
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

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



  • Prev by Date: Re: Very Strange Behaviour about something Very Simple
  • Next by Date: Re: Evaluate, Replace, and Hold
  • Previous by thread: Re: Evaluate, Replace, and Hold
  • Next by thread: Re: Evaluate, Replace, and Hold