Re: How do you control evaluation when using apply?
- To: mathgroup at smc.vnet.net
- Subject: [mg130806] Re: How do you control evaluation when using apply?
- From: Roland Franzius <roland.franzius at uos.de>
- Date: Fri, 17 May 2013 04:34:46 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
- References: <kn21qq$1hl$1@smc.vnet.net>
Am 16.05.2013 09:28, schrieb Brentt: > Why does this work > > In[0]: = jacobianFunction[func_, vars_List] := Module[{f}, > f = Function[Evaluate[vars], Evaluate[D[func, {vars}]]]; > f > ]; > jacobianFunction[{Sin[x y], Cos[x + y]}, {x, y}] @@ {10, 2} > > out[0]:= {{2 Cos[20], 10 Cos[20]}, {-Sin[12], -Sin[12]}} > > But this does not (the goal is to make the function take a point as an > argument) > > > In[0]: = jacobianFunction[func_, vars_List] := Module[{f}, > f = Evaluate[Function[Evaluate[vars], Evaluate[D[func, {vars}]]]]; > f@@ # & > ]; > jacobianFunction[{Sin[x y], Cos[x + y]}, {x, y}][{10, 2}] > > > > I can't get f@@ # & to evaluate properly (I've tried wrapping it in > ReleaseHold and evaluate statements, nothing seems to get it to evaluate. > > I know I can just rewrite the function to take the point but I'm just > curious why it won't work. > > Do your evaluation during function body contruction and replace the Function-head after evaluation jacobianFunction[func_, vars_List] := Module[ {function}, ( function[ {vars}, D[func, {vars} ] /.function->Function )] or apply the Function head to a List construct jacobianFunction[func_, vars_List] := Function@@ { {vars}, D[func, {vars} ] } More easy define a function generator once for all MakeFunction = (Set@@{#1,Function@@{##2}}&); MakeFunction[Subscript[f,1],{x,y},D[f[x,y],x]]; Subscript[f,1] Function[{x, y}, Derivative[1, 0][f][x, y]] -- Roland Franzius