The Mathematica Journal
Departments
Current Issue
Tricks of the Trade
In and Out
Riemann Surfaces IIc
The Mathematica Programmer
New Products
New Publications
Classifieds
Calendar
News Bulletins
Library
Editor's Pick
Mailbox
FAQ
Write Us
About the Journal
Staff and Contributors
Submissions
Subscriptions
Advertising
Back Issues
Home
Download This Issue

Permutations, Signature, and Trace

In "Antisymmetrizing Functions," TMJ, 2 (1), 1992 p. 45, Permutations and Signature were used in the construction of totally antisymmetric functions, that is, functions that change sign under the interchange of any pair of arguments. Jorma Virtamo (jorma.virtamo@vtt.fi) suggested the following improved code.

The Signature of a permutation is , where is the number of transpositions of pairs of elements that must be composed to build up the permutation. By including in the definition of Antisymmetrize initially, cyclic and anticyclic permutations are distinguishable.

In "Calculus with Anticommuting Variables," TMJ, 8 (1), 2001 pp. 38-40, ordered determinants are computed using dynamic programming and Laplace expansion. For an interesting discussion of determinants of matrices with noncommutative entries, see [1]. Here is an alternative functional implementation, which is an extension of the code for Antisymmetrize.

For example, the ordered determinant of a general matrix

is

The code uses the observation that (ordered) terms in the determinant, say , appear as diagonal elements in a permutation of the rows of the transposed matrix.

Tr[list, f] finds a generalized trace, combining terms with f instead of Plus.

As an aside, Robert Knapp (rknapp@wolfram.com) writes: Here are two user-defined functions for computing the trace of a matrix.

Note that Tr is much, much faster.

The timings here are small, but if you have an application that requires repeatedly computing a trace, it makes a difference.

Second, Tr generalizes to multiple dimensions.

One can also use Tr to project out the list of diagonal elements.

Here is a cute way to use it to speed up something very common.

The thing to note here is that Tr[list of numbers] does the same thing as Apply[Plus, list of numbers], but is much faster for packed arrays.


Copyright © 2002 Wolfram Media, Inc. All rights reserved.

[Article Index][Prev Page][Next Page]