I wrote a small package called brfART.m for calculations with tensors and
GRT stuff. It has a function to calculate covariant derivatives. You may
find it on <http://www.pbreitfeld.de/Download.html>
There is an introduction brfART-Bsp.nb too on this site.
Beware: Language is German.
--
_________________________________________________________________
Peter Breitfeld, Bad Saulgau, Germany -- http://www.pBreitfeld.de
For High Energy Physics I once programmed that a long time ago:
http://www.feyncalc.org/FeynCalcBook/CovariantD/
But maybe you want something different?
Rolf Mertig
GluonVision GmbH
Berlin, Germany
It depends on the context in which you're working, as a covariant
derivatives can _look_ quite different.
But maybe what you basically need is an operator of the type
In[1]:= DD[t_]:=(D[#,t]+Con[#,t])&
so that
In[2]:= DD[x]@f[x]
Out[3]= Con[f[x],x]+(f^\[Prime])[x]
Then you need to make your connection, Con act properly. For example,
it should return 0 when acting on scalars, and if you're acting on
explicit Tensors and don't distinguish between contravariant and
covariant, then maybe something like this would work:
In[5]:= Con[expr_?ArrayQ,t_]:=Module[{dim=Dimensions[expr],rep,perms},
rep=Array[Subscript[r, ##][t]&,{dim[[1]],dim[[1]]}];
perms=Table[Range[Length@dim]/.{1->i,i->1},{i,Length@dim}];
Sum[Transpose[rep.Transpose[expr,perm],perm],{perm,perms}]
]
we can test that this works properly on a (square) matrix:
In[6]:= rep=Array[Subscript[r, ##][t]&,{2,2}]; m=Array[Subscript[z, ##]
&,{2,2}];
In[7]:= Con[m,t]==rep.m+m.rep\[Transpose]//Expand
Out[7]= True
The above can be extended to vector derivatives and associated
connections.
Symbolic covariant derivatives are a bit more tricky...
There are some packages out there... a google search for "mathematica
covariant derivative" brings up a few.
The Wolfram pages to look at are
http://library.wolfram.com/infocenter/BySubject/Mathematics/CalculusAnalysis/DifferentialGeometry/
http://library.wolfram.com/infocenter/BySubject/Science/Physics/Relativity/
Finally, if you want to do index / field theory style calculations,
then maybe you could try Cadabra.
Hope some of that helps,
Simon