Jordan form



I'm craving a function to put matrices into the Jordan canonical form,
but I can't find it in the documentation.

Now, correct me if I'm wrong, and I'll eat a bug, but given
eigenvectors and eigenvalues (say, with the eivects command), then
finding the Jordan form is relatively simple; just need to solve a few
extra inhomogenous linear system in order to obtain radical vectors
(a.k.a. generalised eigenvectors; "radical vector" is one of those
Russian terms I truly prefer over its western equivalent). If you
store an LU factorisation of the A - lambda*I matrix (which I'm not
sure is desirable for symbolic computations), solving the inhomogenous
systems is a snap, though you may need to add a few orthogonality
relations. I very verbosely and opinionatedly described such a
procedure here:

     http://everything2.com/index.pl?node_id=1728879

I was reading the source code for the Maple routine for finding the
Jordan form, and they follow a different procedure, based on the
Frobenius normal form (rational canonical form). I know that the
procedure I described in the link for finding Jordan forms is woefully
inefficient, or at least the step for finding the eigenvalues is, but
I think that it's easy to extend the eivects procedure in order to get
radical vectors. I could code it myself in the Maxima language. I'm
still trying to learn lisp and would be unable to do it in this
language.

Ideas, thoughts, suggestions? Better ways to incorporate a Jordan form
algorithm?

Cheers,
- Jordi G. H.