[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 (H42E10)

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 w^5]
[  0 w^3 w^4]
[  w   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 (H42E11)

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]