Re: Incoherent value for partial derivative
- To: mathgroup at smc.vnet.net
- Subject: [mg91075] Re: Incoherent value for partial derivative
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Tue, 5 Aug 2008 04:03:44 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <g76auv$dks$1@smc.vnet.net>
Miguel wrote:
> Let
>
> In[1]: g[x_]:=3x^2+5x;
> FullForm[g'[x]]
>
> Out[1]: Plus[5,Times[6,x]]
>
> In[2]: g'[2]
> Out[2]: 17
>
> Mathematica works fine and the result is correct. First, it executes
> the derivation and then the delayed substitution/assignation.
This is true only for the *special* form g'[2]. If you use D[g[2],x],
you get similar result and behavior as for D[f[1,2],x].
The operator D always evaluates its arguments in the same and consistent
way, regardless of the name and number of variables.
However, the ' (prime) form is a special form that does *not* evaluate
its argument as the operator D does. (And prime works only for a
function of one variable.)
In other words, the ' (prime) form and the operator D form are *not*
equivalent and they are not interchangeable without care.
In[1]:= g[x_] := 3 x^2 + 5 x;
g'[2] // Trace
D[g[2], x] // Trace
Out[2]=
2 2
{{g', {g[#1], 3 #1 + 5 #1, 5 #1 + 3 #1 }, 5 + 6 #1 & },
(5 + 6 #1 & )[2], 5 + 6 2, {6 2, 12}, 5 + 12, 17}
Out[3]=
2 2
{{g[2], 3 2 + 5 2, {{2 , 4}, 3 4, 12}, {5 2, 10}, 12 + 10, 22},
D[22, x], 0}
As we can see above, the ' (prime) form first the function into an pure
function and takes its first derivative, then applies the resulting pure
function to the numeric value (2) passed as argument of the original
function.
On the other hand, the operator D first evaluates its argument, which
yields a numeric value, i.e. a constant, and since the derivative of a
constant with respect to whatever variable is zero, the result is zero.
> But for
> partial derivative Mathematica works different way (not correspondig
> to FullForm
FullForm is irrelevant here: what matters is when the arguments are
evaluated and how they are transformed before before applying numeric
value. Trace is more appropriate to visualize what is going on. You can
see the the reasoning (and behavior) is similar to what we did above.
In[4]:= f[x_, y_] := x^2 + x y^2;
FullForm[D [f[x, y], x]]
D[f[1, 2], x] // Trace
Out[5]//FullForm= Plus[Times[2, x], Power[y, 2]]
Out[6]=
2 2 2 2
{{f[1, 2], 1 + 1 2 , {1 , 1}, {{2 , 4}, 1 4, 4}, 1 + 4, 5},
D[5, x], 0}
> In[3]: f[x_,y_]:=x^2+x y^2;
> FullForm[\!\(
> \*SubscriptBox[\(\[PartialD]\), \(x\)]\ \(f[x, y]\)\)]
>
> Out[3]: Plus[Times[2,x],Power[y,2]]
>
> In[4]: \!\(
> \*SubscriptBox[\(\[PartialD]\), \(x\)]\ \(f[1, 2]\)\)
> Out[4]: 0
>
> I dont understand the reason.
Hope this helps,
-- Jean-Marc