TensorContract

TensorContract[tensor,{{s11,s12},{s21,s22},}]

yields the contraction of tensor in the pairs {si1,si2} of slots.

Details

  • The first argument of TensorContract[tensor,pairs] can be any tensorial object, in particular explicit or symbolic arrays, or combinations like tensor products, transpositions, etc.
  • The slots sij must all be different positive integers, not larger than the rank of the contracted tensor.
  • The slots contracted in each pair must all have the same dimensions, but different pairs might be associated to different dimensions.
  • For a symbolic tensor in the first argument of TensorContract, the contractions in the second argument are sorted, after sorting the slots in each contraction.
  • TensorContract[tensor,{}] returns tensor.

Examples

open allclose all

Basic Examples  (3)

Contract slots 2 and 3 of a rank-3 array:

Perform several contractions in an array:

A symbolic array of rank 3:

Slots 1 and 3 can be contracted:

Slots 1 and 2 cannot be contracted:

Scope  (3)

Contractions of arrays:

Contraction of symbolic arrays:

Report invalid contractions for symbolic arrays:

Combining successive contractions:

Generalizations & Extensions  (1)

With arrays it is possible to use contractions of more than two slots, using the function SymbolicTensors`ArrayContract:

It is also possible to specify an arbitrary head, generalizing the role of Plus:

The contraction can be performed in such a way that levels stay inside the contraction head g:

Properties & Relations  (7)

Contraction of the first levels of an array is equivalent to Tr:

Contraction of a tensor product of arrays is equivalent to Dot and Inner:

Inner performs one contraction between two arrays:

Dot with arguments performs contractions among them:

Arbitrary contractions can be also performed with a combination of Transpose and Apply:

Contraction of antisymmetric pairs of array levels gives zero:

Since levels one and three are not an antisymmetric pair, the result is not zero:

Contraction of antisymmetric symbolic arrays gives zero:

In other cases, the expression is canonicalized, moving contractions to the last possible slots:

TensorContract[tensor,{}] returns tensor, irrespectively of what tensor is:

TensorContract, in combination with TensorProduct, can be used to implement Dot:

Possible Issues  (1)

Invalid contractions are reported:

The expression becomes inert then:

Introduced in 2012
 (9.0)