Re: RE:? D[f,{x,n}]
- To: mathgroup at smc.vnet.net
- Subject: [mg25570] Re: [mg25559] RE:[mg25495] ? D[f,{x,n}]
- From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
- Date: Sun, 8 Oct 2000 00:41:57 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
on 10/7/00 4:36 PM, Ersek, Ted R at ErsekTR at navair.navy.mil wrote:
> seems to prove that D[f, {x, n}] evaluates
> Nest[ D[#, x]&, f, n ]
> or something equivalent.
> -----------------------------
I think the point is (as already has been pointed out by Carl Woll) that:
In[22]:=
MatchQ[Unevaluated[D[f, {x, n}]], Unevaluated[D[f_, y_]]]
Out[22]=
True
We can see what happens in your case simply by looking at Trace:
In[28]:=
Trace[D[(x + 2)^4, {x, 2}]]
Out[28]=
{{{HoldForm[x + 2], HoldForm[2 + x]}, HoldForm[(2 + x)^4]}, HoldForm[D[(2 +
x)^4, {x, 2}]], {HoldForm[flag], HoldForm[True]}, HoldForm[Block[{flag},
D[Expand[(2 + x)^4], {x, 2}]]], {{HoldForm[Expand[(2 + x)^4]], HoldForm[16 +
32*x + 24*x^2 + 8*x^3 + x^4]}, HoldForm[D[16 + 32*x + 24*x^2 + 8*x^3 + x^4,
{x, 2}]], HoldForm[48 + 48*x + 12*x^2]}, HoldForm[48 + 48*x + 12*x^2]}
As you can see, D[(2 + x) , {x, 2}] was found to match the rule for
D[f_,x_]/;flag and the rule was simply applied. There was need to use Nest,
and so on. This is just a case of pattern matching doing its job.
A similar approach can be used to show that when Mathematica evaluates
Derivative[n][f] it does not do actually do this by nesting Derivative[1]'s.
Here is a rule for Derivative that is, essentially, equivalent to the above
one for D (note that there is no need to use Unprotect as Derivative does
not have the Protected Attribute!):
In[1]:=
Derivative[1][Function[p_]] /; flag :=
Block[{flag}, Derivative[1][Function @@ {Expand[p] }]]
In[2]:=
flag = True;
This works just as above:
In[3]:=
(# + 2)^3 &'[x]
Out[3]=
2
12 + 12 x + 3 x
But:
In[4]:=
((# + 2)^3 &)''[x]
Out[4]=
6 (2 + x)
While on the other hand
In[5]:=
((# + 2)^3 &')'[x]
Out[5]=
12 + 6 x
Of course what one should do is use a more general pattern:
In[6]:=
Derivative[n_][Function[p_]] /; flag :=
Block[{flag}, Derivative[n][Function @@ {Expand[p] }]]
so that:
In[7]:=
((# + 2)^5 &)'''[x]
Out[7]=
2
240 + 240 x + 60 x
--
Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/
http://sigma.tuins.ac.jp/