MathGroup Archive 2008

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

Search the Archive

Re: Re: Derivative of Dot[]

On Wed, Aug 6, 2008 at 2:35 PM, Eitan Grinspun <eitan at> wrote:
>>> Consider the following function:
>>> F[x_] := Dot[x,x]
>>> Evaluating this function works as expected: F[{1,2}] evaluates to 5.
>>> I differentiate this function w.r.t. its sole argument, F' evaluates
>>> to 1.#1+#1.1&
>>> This is reasonable, and as expected. I would think that, since the
>> The above expression make sense only for one dimensional vectors, say on
>> the real line; in other words, a vector space where the unit vector is
>> {1} and any vector {x} has only one component x.
> Why? Even of a vector {x}, the resulting derivative cannot be
> evaluated successfully: (1.#1+#1.1&)[{x}] does not simplify (the 1.
> remains).

Oops! You are right, of course. (I was too fast to answer did not spot
that the dot was for the dot product and not associated with the ones
(1.) as floating-point numbers (and so there was no implicit
multiplication)! Sorry for any confusion.

>> You may want to write you own differentiating function such as the
>> following:

Note that I missed the point that you wanted to compute the gradient.
As pointed out by Bill Rowe, the derivative of the dot product is not
the gradient. So beware that the function I gave you in example
differentiates a dot product but does not compute the gradient.

> I have done so before; but the question is what is the intended use of
> the built in derivative of Dot? I can't find one.

I believe that Andrzej Kozlowski's replies (note that there are two of
them) clearly explain how the derivative of the dot product is derived
the way it is, as well as the rational behind it. Be sure to read both
of them if you have not done so yet.

- Jean-Marc

> Eitan
>>   In[1]:=
>>     SetAttributes[myDiff, HoldFirst]
>>     myDiff[fun_[x_?VectorQ]] :=
>>      Module[{v = Array[a, Length[x]]},
>>       D[fun[v], {v}] /. Thread[v -> x]]
>>     f[x_?VectorQ] := Dot[x, x]
>>     myDiff[f[{1, 2}]]
>>     myDiff[f[{1, 2}]].{3, 4}
>>     g[y_] := 2 f[y]
>>     myDiff[g[{1, 2}]]
>>     myDiff[g[{1, 2}]].{3, 4}
>>   Out[4]= {2, 4}
>>   Out[5]= 22
>>   Out[7]= {4, 8}
>>   Out[8]= 44

  • Prev by Date: Re: Find count of binary number pattern within concatenated number
  • Next by Date: Re: GPU vs CPU in Mathematica 6
  • Previous by thread: Re: Re: Derivative of Dot[]
  • Next by thread: Please help me.....