[GiNaC-list] Differentiation of a function with respect to a tensor

Stephen Montgomery-Smith stephen at missouri.edu
Fri Feb 11 14:28:04 CET 2011


But do remember, if E is symmetric, that you have to somehow tell GiNaC 
that e12=e21.  I do a lot of similar stuff in Mathematica, and I start 
with a statement like
E = {{e11,e12,e13},{e12,e22,e23},{e13,e23,e33}}
so one way you could do this in GiNaC is to create a variable E:
expr E[3][3]
and set E[i][j] = to eij or eji as appropriate.  And then for something 
like E:E you get
expr EddE = 0;
for (i=0;i<3;i++) for (j=0;j<3;j++)
   EddE += E[i][j]*E[i][j];
(In Mathematica you could more easily do
EddE = Tr[E.E]
but Mathematica costs a fortune unless you are part of a university with 
a site license.)

Bernardo Rocha wrote:
> Dear Stephen,
>
> thanks a lot for your support. I was considering if doing it this way it
> would work, now I got my confirmation. Thanks a lot again.
>
> Best regards,
> Bernardo
>
>
> 2011/2/11 Stephen Montgomery-Smith <stephen at missouri.edu
> <mailto:stephen at missouri.edu>>
>
>     Bernardo Rocha wrote:
>
>         Hi everyone,
>
>         I've recently discovered GiNaC and I'm really excited about its
>         capabilities. There is one thing that I would like to know if it
>         is able
>         to do that I haven't found in the tutorial.pdf or in any other place
>         that I've searched.
>
>         I would like to know if, given a function \Psi=\Psi(E), like the
>         strain
>         energy function for the St. Venant-Kirchhoff material
>
>         \Psi(E) = 0.5 * \lambda * (tr E)^2 + \mu E:E
>
>         is it possible to differentiate it with respect to E, that is i
>         would
>         like to compute \frac{\partial \Psi}{\partial E}. If this is
>         possible,
>         could someone please send some examples or maybe point to which
>         classes
>         should I use to do that?
>
>         That's all for now. Many thanks in advance.
>
>         Best regards,
>         Bernardo M. R.
>
>
>
>     Couldn't you do it this way?  Write \Psi(E) as an expression
>     involving the variables e11,e12,e13,...,e33 which are the entries of
>     E.  Then compute the partial derivatives \frac{\partial
>     \Psi}{\partial eij} for 1<=i,j<=3.  (Presumably you suppose that E
>     is symmetric so only six partial derivatives need to be computed,
>     but even if it is not necessarily symmetric you still only need 9
>     partial derivatives.)  Just store this as something like:
>
>     expr dPsi_dE[3][3]
>
>     or
>
>     vector<expr> dPsi_dE
>
>     or something similar.
>
>



More information about the GiNaC-list mailing list