How to define the Einstein summation convention in Mathematica?

How to define a Einstein summation convention in Mathematica?

Say, how to let Mathematica know T[i,i] equals T[1,1]+T[2,2]+T[3,3]? How to define the function T[i,j]?

I know there are several Mathematica-abased programs that can do this, but still I want to know how to define my own.

-
This is partially related mathematica.stackexchange.com/a/15330/1089 ? –  chris Dec 15 '12 at 16:01

migrated from stackoverflow.comNov 15 '12 at 14:19

This question came from our site for professional and enthusiast programmers.

For a single Function T this is pretty easy:

T[i_, i_] /; ! NumberQ[i] := Sum[T[j, j], {j, 3}]


A quick test gives:

In[7]:= T[i, i]

Out[7]= T[1, 1] + T[2, 2] + T[3, 3]


If you want to always sum over two equal indices for several functions, this might need some extra work though.

-
Thanks, einbandi. The answer is just what I want. –  pengfei_guo Nov 15 '12 at 6:24