MathGroup Archive 2008

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

Search the Archive

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]



  • 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