       Re: Problems with Set, SetDelayed and replacement rules...

• To: mathgroup at smc.vnet.net
• Subject: [mg72287] Re: [mg72274] Problems with Set, SetDelayed and replacement rules...
• From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
• Date: Mon, 18 Dec 2006 06:56:08 -0500 (EST)
• References: <200612171120.GAA07339@smc.vnet.net>

```On 17 Dec 2006, at 20:20, Johannes wrote:

> Hi,
>
> I am working a lot with physics equations where I have on the one
> hand variables, and on the other hand paramters, which depend on
> other parameters which are only given by a polynome.
> In the following (very simplified example) f is a function which
> depends on variable x and parameters g and h which depend both on
> parameter p:
>
> f[x_]:= g/h*x;
> g[p_]= 1+p;
> h[p_]=1+p^2;
> params={g->g[p],h->h[p]};
>
> For numerical application, I would like to define a second function
> f with p as second variable. This I have done with different
> methods, and there I noticed a difference that I can't explain
>
> f1[x_, p_] = f[x] /. params;
> f2[x_, p_] := f[x] /. {g->g[p],h->h[p]};
> f3[x_, p_] := f[x] /. params;
>
> If I am now calculating f1[1,1], f2[1,1] and f3[1,1], f1 and f2
> deliver as expected a numerical value, but for f3[1,1] p isn't
> replaced by its value 1.
>
> Can anybody explain me the differences, especially the differences
> between f2 and f3? I suspected it to be exactly identical.
>
> And does anybody know a better method to treat parameters? My
> problem is that when doing analytical transformations (Derivatives,
> Integrations...), an immediate replacement of the parameters g and
> h would make the result very hard to read, so I was searching for
> an easy method to replace them as late as possible.
>
> Thanks in advance for any help,
> Johannes
>

When you have a definition like this:

f[a1_,a2_,...]:=Body

and evaluate f[b1,b2,...] what happens is this. First b1,b2,... are
literally substituted for a1,a2,... in Body and then Body is
evaluated. So look at you secodn defintion:

> f3[x_, p_] := f[x] /. params;
>

When you evaluate f3[1,1] there is no p on the right hand side to
substitute 1 for, so it is not substituted. Only after the
substitution params is evaluated, and then p appears but by now it is
too late.

I am not sure what sort of "readability" problem you are referring to?
You could of course use:

f3[x_, p_] := Evaluate[f[x] /. params]

but I am not sure whether this helps?

Andrzej Kozlowski

```

• Prev by Date: RE: Problems with Set, SetDelayed and replacement rules...
• Next by Date: Aspect Ratio -> 1 and copy-and-paste of figures
• Previous by thread: Problems with Set, SetDelayed and replacement rules...
• Next by thread: Re: Problems with Set, SetDelayed and replacement rules...