Symmetry plays a key role in the treatment of high-rank tensors. Most high-rank tensors of importance in physics and mathematics have symmetry, from the symmetric inertia tensors to the rank-4 stiffness and curvature tensors. Many of them have transposition symmetries, in some cases rather complicated. The Wolfram System implements a complete language for permutation symmetries of tensors of any rank or dimensions, and provides a specialized type of array that stores only the independent components with respect to symmetry. This frequently results in a substantial gain in storage space, though usually at the expense of slower manipulations, because more complex algorithms are required. See "Tensor Symmetries" for a description of the language of symmetries.
|SymmetrizedArray||construct an array storing only symmetry independent components|
|SymmetrizedArrayRules||list of rules of independent components of a symmetrized array|
|SymmetrizedReplacePart||replace independent components in a symmetrized array|
Symmetrized arrays offer a compact way to store some arrays with much symmetry. In particular, antisymmetry maximizes this gain. In the most extreme nonzero case, a fully antisymmetric rank- array in dimension has one independent component. Its sparse representation contains nonzero elements, and its normal form has entries. On the other hand, manipulation of symmetrized arrays is usually slower because it requires more complex algorithms.
StructuredArray objects, in particular symmetrized arrays, are treated as atomic objects. Their information can be accessed using functions.
It has been shown that SymmetrizedArray can be used to rewrite a normal array with symmetry in a more efficient form. Following SparseArray, SymmetrizedArray can also construct the same efficient representation from a list of rules and a symmetry specification.
General patterns in rules can be used in the first argument of SymmetrizedArray. These rules are meant to be rules for the independent components only, as given by SymmetrizedIndependentComponents, and not for all positions of the array, as SparseArray would do. In particular, this is useful to generate symmetrized arrays with random entries.
An alternative way to construct symmetrized arrays is by actual symmetrization of other arrays, using the function Symmetrize.