JORDAN _ _ _ _ _ _ _ _ _ _ _ _ operator
The operator jordan computes the Jordan normal form J of a matrix (A say). It returns {J,P,P^-1} where P*J*P^-1 = A.
<matrix> :- a square matrix.
Field Extensions: By default, calculations are performed in the rational numbers. To extend this field the arnum package can be used. The package must first be loaded by load_package arnum;. The field can now be extended by using the defpoly command. For example, defpoly sqrt2**2-2; will extend the field to include the square root of 2 (now defined by sqrt2). See frobenius for an example.
Modular Arithmetic: Jordan can also be calculated in a modular base. To do this first type on modular;. Then setmod p; (where p is a prime) will set the modular base of calculation to p. By further typing on balanced_mod the answer will appear using a symmetric modular representation. See ratjordan for an example.
a := mat((1,x),(0,x)); [1 x] a := [ ] [0 x] jordan(a); { [1 0] [ ] [0 x] , [ 1 x ] [------- --------------] [ x - 1 2 ] [ x - 2*x + 1 ] [ ] [ 1 ] [ 0 ------- ] [ x - 1 ] , [x - 1 - x ] [ ] [ 0 x - 1] }