MathGroup Archive 2000

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

Search the Archive

Re: Vector and Matrix Differentiation with Mathematica

  • To: mathgroup at smc.vnet.net
  • Subject: [mg22297] Re: [mg22284] Vector and Matrix Differentiation with Mathematica
  • From: Hartmut Wolf <hwolf at debis.com>
  • Date: Thu, 24 Feb 2000 03:01:14 -0500 (EST)
  • Organization: debis Systemhaus
  • References: <200002230601.BAA22821@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Johannes Ludsteck schrieb:
> 
> Dear Mathgroup Members,
> I have to compute derivatives of functions including vectors and
> matrices. To the best of my knowledge Mathematica doesn't
> support this fully.
> 
> For example, If b is a vector and A a conformable square matrix,
> D[b . A . b, b]
> should evaluate to A + Transpose[A].
> Mathematica returns
> 0.A.b + 2 1.0.b + 2 1.A.1 + 2 b.0.1 + b.0.b + b.A.0
> 
> With some additional Rules you get a more sensible result:
> 
> D[D[b.A.b, b], b]
>         //. {Dot[___, 0, ___] -> 0, Dot[x___, 1, y___] -> Dot[x, y]}
> 
> Evaluates to 2 A. This is, of course, true only if A is symmetric.
> I don't claim that Mathematica makes an error here.
> Rather my Rules seem to be buggy.
> (However a reason for the problem might be that Mathematica
> doesn't keep track of vector dimensions, i.e. Mathematica doesn't
> distinguish between row and column vectors.)
> Since I assume that I will have to invest some time to supply the
> rigth rules, I ask, whether someone of you has written a package,
> which does my jobs or can provide any experience with matrix
> calculus in Mathematica.
> 

Dear Johannes,

when I do Dt on Dot I get 

In[9]:= Dt[b.A.b, b]
Out[9]= 1.A.b + b.A.1 + b.Dt[A, b].b

which is perfectly right, considered the fact that Mathematica has not
been told what either b or A are.  If you do, you also should know very
well what ...

In[10]:= D[b, b]
Out[10]= 1

... really is. If you substitute this "1" into Out[9] you'll have a 100%
correct result.

However if you define 

In[11]:= A = Array[a, {3, 3}];
         b = Table[cb[i, t], {i, 3}];

and now take the derivative

In[13]:= D[b.A.b, t]
Out[13]= ....

compared to

In[14]:= D[b, t].A.b + b.A.D[b, t]
Out[14]= ....

In[15]:= % == %%
Out[15]= True

Hope to have helped,
kind regards, 
	Hartmut


  • Prev by Date: Building lists
  • Next by Date: Re: Notional NotebookOpen Nonplus?
  • Previous by thread: Vector and Matrix Differentiation with Mathematica
  • Next by thread: Re: Simple Ques.