[Next] [Prev] [Right] [Left] [Up] [Index] [Root]
Canonical Forms for Elements

Canonical Forms for Elements

The functions defined here apply to matrices defined over Euclidean Domains.

EchelonForm(a) : ModMatRngElt -> ModMatRngElt, ModMatRngElt
The (row) echelon form of matrix a belonging to a submodule of the module Hom_R(M, N). This function returns two values:
ElementaryDivisors(a) : ModMatRngElt -> [RngElt]
The elementary divisors of the matrix a belonging to a submodule of the module Hom_R(M, N). The divisors are returned as a sequence [e_1, ..., e_d], e_i | e_(i + 1) (i=1 , ..., d - 1) of d elements of R, where d is the rank of a.

HermiteForm(a) : ModMatRngElt -> ModMatRngElt, ModMatRngElt
The row Hermite normal form of an matrix a belonging to a submodule of the module Hom_R(M, N). This function returns two values:
Rank(a) : ModMatRngElt -> RngIntElt
Given a matrix a belonging to the matrix ring R over the Euclidean domain S, return the column rank of a.
SmithForm(a) : ModMatRngElt -> ModMatRngElt, ModMatRngElt, ModMatRngElt
The Smith normal form for the matrix a belonging to a submodule of the module Hom_R(M, N). This function returns two values:

Example HMod_Forms1 (H35E6)

We illustrate some of these operations in the context of the module Hom_R(M, N), where M and N are, respectively, the 4-dimensional and 3-dimensional vector spaces over GF(8).

> K<w> := GaloisField(8);
> V3   := VectorSpace(K, 3);
> V4   := VectorSpace(K, 4);
> M    := Hom(V4, V3);
> A    := M ! [1, w, w^5, 0,  w^3, w^4, w, 1,  w^6, w^3, 1, w^4 ];
> print A;

[ 1 w^1 w^5 ] [ 0 w^3 w^4 ] [ w^1 1 w^6 ] [ w^3 1 w^4 ] > print EchelonForm(A);

[ 1 0 0 ] [ 0 1 0 ] [ 0 0 1 ] [ 0 0 0 ]


Example HMod_Forms2 (H35E7)

We illustrate these operations in the context of the module Hom_(R)(M, N), where M and N are, respectively, the 4-dimensional and 5-dimensional modules over the ring of integers Z.

> Z  := Integers();
> Z4 := RSpace(Z, 4);
> Z5 := RSpace(Z, 5);
> M  := Hom(Z4, Z5);
> x  := M ! [ 2, -4, 12, 7, 0,   
>             3, -3,  5, -1,  4,
>             2, -1, -4, -5,-12,    
>             0,  3,  6, -2,  0 ];
> print x;

[ 2 -4 12 7 0 ] [ 3 -3 5 -1 4 ] [ 2 -1 -4 -5 -12 ] [ 0 3 6 -2 0 ] > print Rank(x); 4 > print HermiteForm(x);

[ 1 1 1 6 -164 ] [ 0 3 0 16 -348 ] [ 0 0 2 13 -200 ] [ 0 0 0 19 -316 ] > print SmithForm(x);

[ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 2 0 ] > print ElementaryDivisors(x); [ 2 ]


[Next] [Prev] [Right] [Left] [Up] [Index] [Root]