Re: Bug: Derivative[] does not work with functions having slots in
- To: mathgroup at smc.vnet.net
- Subject: [mg86667] Re: Bug: Derivative[] does not work with functions having slots in
- From: Andrew Moylan <andrew.j.moylan at gmail.com>
- Date: Mon, 17 Mar 2008 00:22:20 -0500 (EST)
- References: <frituo$io$1@smc.vnet.net>
Even more interesting: this particular "bug" even follows from the documentation for Derivative: "Whenever Derivative[n][f] is generated, Mathematica rewrites it as D[f[#],{#,n}]&." Thus, for your example, f[#] evaluates to Sin[2] and g[#] evaluates to Sin[1 + #1]. Thus, the issue is related to the scoping of "Slot[1]". Perhaps the bug could be fixed by effectively changing "Mathematica rewrites it as D[f[#],{#,n}]&." to "Mathematica rewrites it as Module[{expr, x}, Function[expr] /. expr -> (D[f[x], {x,n}] /. x -> #)]." That should work. So here is a function that replaces Derivative[1] and works properly in your example: fixedDerivative[f_] := Module[{expr, x}, Function[expr] /. expr -> (D[f[x], x] /. x -> #)] On Mar 16, 9:48 pm, Szabolcs Horv=E1t <szhor... at gmail.com> wrote: > There is a bug in Derivative. It does not seem to like slots. > > For example, let f[x_] := Sin[x + #]&[1] (Yes, I know that this looks > silly. It is a simplified example.) > > D can be used for calculating the derivative, but Derivative cannot. > > In[2]:= D[f[a], a] > Out[2]= Cos[1 + a] > > In[3]:= f'[a] > Out[3]= 0 > > A workaround is to use pure functions with explicitly named parameters: > > In[4]:= g[x_] := Function[{p}, Sin[x + p]][1] > > In[5]:= g'[a] > Out[5]= Cos[1 + a]