MathGroup Archive 2006

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

Search the Archive

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...