Hermite Form - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.
Our website is currently undergoing maintenance, which may result in occasional errors while browsing. We apologize for any inconvenience this may cause and are working swiftly to restore full functionality. Thank you for your patience.

Online Help

All Products    Maple    MapleSim


LinearAlgebra[Generic]

  

HermiteForm

  

compute the Hermite form of a Matrix

 

Calling Sequence

Parameters

Description

Examples

Calling Sequence

HermiteForm[E](B)

HermiteForm[E](B,output=out)

Parameters

E

-

the domain of computation, a Euclidean domain

B

-

m x n Matrix of values in E

out

-

one of H, U or a list containing one or more of these names

Description

• 

Given an m x n Matrix B of values in E, HermiteForm[E](B) returns the Hermite form H of B, an m x n Matrix of values in E.

• 

The Hermite normal form Matrix H satisfies:

(1) H is row-equivalent to B and H is in row echelon form

(2) The bottom-most nonzero entry p[j] = H[b,j] in each column j is unit normal, and either H[i,j]=0 or the Euclidean norm of H[i,j] where i<b is less than Euclidean norm of p[j]

(3) If B is n x n square Matrix, then prod(H[i,i],i=1..n) = u*det(B) where u is a unit in E

• 

The uniqueness of H depends on the uniqueness of the remainder operation in E. For example, if E is the ring of integers, and a and b are integers, and the remainder of a / b is in the positive range 0..abs(b)-1, then H is unique. If Maple's irem function is used, as in the example below, because the remainder is in the range 1-abs(b)..abs(b)-1, H is not unique.

• 

The (indexed) parameter E, which specifies the domain of computation, a Euclidean domain, must be a Maple table/module which has the following values/exports:

  

E[`0`]: a constant for the zero of the ring E

  

E[`1`]: a constant for the (multiplicative) identity of E

  

E[`+`]: a procedure for adding elements of E (nary)

  

E[`-`]: a procedure for negating and subtracting elements of E (unary and binary)

  

E[`*`]: a procedure for multiplying two elements of E (commutative)

  

E[`=`]: a boolean procedure for testing if two elements in F are equal

  

E[Quo]: a procedure which computes the quotient of a / b. E[Quo](a,b,'r') computes the quotient q of a / b and optionally assigns r the remainder satisfying a = b q + r.

  

E[Rem]: a procedure for finding the remainder of a / b. E[Rem(a,b,'q') computes the remainder r of a / b and optionally assigns q the quotient satisfying a = b q + r.

  

E[Gcdex]: a procedure for finding the gcd g of a and b, an element of E. E[Gcdex](a,b,'s','t') computes the gcd of a and b and optionally assigns s and t elements of E satisfying s a + t b = g.

  

E[UnitPart]: a procedure for returning the unit part of an element in E

  

E[EuclideanNorm]: a procedure for computing the Euclidean norm of an element in E, a non-negative integer.

• 

For a,b in E, b non-zero, the remainder r and quotient q satisfy a = b q + r and r = 0 or EuclideanNorm(r) < EuclideanNorm(b).

• 

For non-zero a,b in E, units u,v in E, the Euclidean norm satisfies:

  

EuclideanNorm(a b) >= EuclideanNorm(a)

  

EuclideanNorm(u) = EuclideanNorm(v)

  

EuclideanNorm(u a) = EuclideanNorm(a)

• 

The Hermite form is computed by putting the principal block H[1..i,1..i] into Hermite form using elementary Row operations. This algorithm does at most O(n^4) operations in E.

Examples

withLinearAlgebraGeneric&colon;

Z`0`,Z`1`,Z`+`,Z`-`,Z`*`,Z`=`0,1,`+`,`-`,`*`,`=`&colon;

ZGcdexigcdex&colon;

ZQuo,ZRemiquo,irem&colon;

ZUnitPartsign&colon;

ZEuclideanNormabs&colon;

AMatrix1&comma;2&comma;3&comma;4&comma;5&comma;2&comma;3&comma;4&comma;5&comma;6&comma;4&comma;1&comma;2&comma;5&comma;2&comma;1&comma;4&comma;2&comma;1&comma;2

A123452345641−2−5−2−1−4−212

(1)

HHermiteFormZA

H10−1−2−30123400511300006

(2)

H,UHermiteFormZA&comma;output=H&comma;U

H,U10−1−2−30123400511300006,−32002−100−1512−2110−710

(3)

MatrixMatrixMultiplyZU&comma;A

10−1−2−30123400511300006

(4)

Using positive range for the remainder, given by modp(a,b).

Z[Quo] := proc(a,b,r) local q,rr; rr := Z[Rem](a,b,'q'); if nargs=3 then r := rr; end if; q; end proc:

Z[Rem] := proc(a,b,q) local r,qq; r := modp(a,b); if nargs=3 then q := iquo(a-r,b); end if; r; end proc:

HHermiteFormZA

H104900123400511300006

(5)

UHermiteFormZA&comma;output=U

U−1814−212−100−1512−2110−710

(6)

MatrixMatrixMultiplyZU&comma;A

104900123400511300006

(7)

See Also

Euclidean Norm

LinearAlgebra[Generic]

LinearAlgebra[HermiteForm]