Re: Controlled evaluation of functions
- To: mathgroup at smc.vnet.net
- Subject: [mg56806] Re: [mg56763] Controlled evaluation of functions
- From: "David Park" <djmp at earthlink.net>
- Date: Fri, 6 May 2005 03:00:40 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Brett, The reason Sin doesn't further evaluate is that you have exact expressions and Mathematica knows no further rules for it. But make i in your Table an approximate number and Sin will evaluate and behave just like your k. So if you don't want k to evaluate, don't give it a definition! Or rather, make it a rule and then use the rule when you want evaluation. And in general, if you want controlled evaluation use rules instead of definitions. krule = k -> (#^2 &); f[i_, x_] := k[i x] g[x_] = Table[f[i, x], {i, 3}] {k[x], k[2 x], k[3 x]} {3, 0, 1}.g[y] % /. krule 3 k[y] + k[3 y] 12*y^2 David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ From: Brett Patterson [mailto:muckle.moose at gmail.com] To: mathgroup at smc.vnet.net Consider the following behaviour: In[1]:= f[i_, x_] := Sin[i x] In[2]:= g[x_] = Table[f[i, x], {i, 3}] Out[2]= {Sin[x], Sin[2 x], Sin[3 x]} In[3]:= {3, 0, 1} . g[y] Out[3]= 3 Sin[y] + Sin[3 y] This is what I want to do, but using my own function instead of Sin. However, this is the result: In[4]:= k[x_] := x^2 (* This is my alternative to Sin *) In[5]:= f[i_, x_] := k[i x] In[6]:= g[x_] = Table[f[i, x], {i, 3}] Out[6]= {x^2, 4 x^2, 9 x^2} (* I want {k[x], k[2 x], k[3 x]} *) In[7]:= {3, 0, 1} . g[y] Out[7]= 12 y^2 (* I want 3 k[y] + k[3 y] *) How can I get the function k to behave like Sin, so that it is not evaluated? Note that in my real application, k is a lot more complex and has conditions on its arguments, etc. Thanks! Brett Patterson