Using Mathematica for tensor analysis

Mathematica 9 contains some functionality for working with symbolic tensors.

Here's a list of packages in no particular order, that may have some functionality for working with symbolic tensors.

  • TensoriaCalc - intended for basic calculations in general relativity, but not finished (calculates only Christoffel symbols, Riemann and Ricci tensor). Parallel working with many metrics is possible. Symbolic calculations are not supported.

  • FeynCalc

  • grt - intended for basic calculations in general relativity, but full of bugs (only Christoffel symbols fully function). Symbolic calculations are not supported.

  • NCAlgebra, for manipulating non-commuting algebraic expressions and computing non-commutative Gröbner bases. It allows working with symbolic matrices and symbolic block matrices (e.g. symbolic block matrix inversion).

  • xAct - a package designed by researchers for large scale projects in general relativity; subpackages capable of extensive tensor manipulation (xTensor, xCoba) as well as perturbation theory in general relativity to any order (xPert). Other subpackages can also work with tensor spherical harmonics, spinor computations as well as exterior calculus (diferential forms).

  • GRQUICK

  • MathTensor (non-free)

  • Tensorial (non-free)

  • Ricci (last updated Sep 2011)

  • diffgeo (free) - a very simple package for differential geometry. Works only with given basis and metric

  • GREATER2 (free) - a simple package for tensorial calculations. Aimed more at physicists where e.g. the metric can be input as a line element.

  • OGRe (free) - released in 2021 for Mathematica 12.0 and later. Designed to be both powerful and user-friendly. Especially suitable for general relativity. Allows performing arbitrarily complicated tensor operations, and automatically transforms between index configurations and coordinate systems behind the scenes as needed for each operation.

See also the Wikipedia page on Tensor Software.


The link for Tensorial above is dead, you may find something interesting on J. F. Gouyet's page.

I prefer in general not to use packages and make my own simple cooking.

Also there are two functions Subscript and Index with almost same formats but slightly different syntaxes and definitions.

Index was introduced in V10. Using Subscript may be more careful because many people still have old Mathematica versions.