MathGroup Archive 2008

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

Search the Archive

Re: Bug: Derivative[] does not work with functions having slots in

Even more interesting: this particular "bug" even follows from the
documentation for Derivative:

  "Whenever Derivative[n][f] is generated, Mathematica rewrites it as

Thus, for your example,

f[#] evaluates to Sin[2]


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

  • Prev by Date: Does Mathematica think Sqrt[2] is rational?
  • Next by Date: Re: Operate on Heads
  • Previous by thread: Re: Does Mathematica think Sqrt[2] is rational?
  • Next by thread: Question on looping FindRoot