[plt-scheme] Matrix Determinants

From: Arthur Nunes-Harwit (anh at cs.rit.edu)
Date: Fri Mar 28 11:19:25 EDT 2008

Dear Henk,

   A somewhat obscure approach to the determinant that might give you the 
sort of elegant code you desire involves the wedge product and 

   A vector v = (a1, ..., an) = a1*e1 + ... + an*en, where ei is the ith 
basis vector.

   A multi-vector m = a1*E1 + ... + an*En, where Ei is a wedge product of 
basis vectors.  ie E = ei1^...^eik, where E is in normal form if there are 
no repetitions, and the subscripts are in ascending order.  This product 
has the following properties for products of basis vectors.

   ei1^(ei2^E) = (ei1^ei2)^E = -(ei2^ei1)^E, so
   (ei1^ei1)^E = 0

IE the wedge product is associative, and anticommutative.

   The wedge product is distributive; hence to extend the product to 
multi-vectors, it is only necessary to define what happens on scaled Es.

   (a*Ei)^(b*Ej) = (a*b)*(Ei^Ej)

   We can also extend the dot product to multi-vectors.

   (a*Ei).(b*Ej) = a*b if Ei = Ej, otherwise 0

Now the determinant of a matrix M = [v1, ..., vn], where each vi is an 
n-dimensional vector can be defined as follows.

Det M = Det [v1, ..., vn] = (v1^...^vn).(e1^...^en)

   This formulation seems particularly simple to my eye.


Det [(1, 3), (2, 4)] =
((1*e1 + 3*e2)^(2*e1+4*e2)).(e1^e2)=
(e1^(2*e1+4*e2) + 3*e2^(2*e1+4*e2)).(e1^e2)=
(4*(e1^e2) + 6*(e2^e1)).(e1^e2)=
(4*(e1^e2) + -6*(e1^e2)).(e1^e2)=


Posted on the users mailing list.