compute the Smith form of a Matrix
the domain of computation, an Euclidean domain
m x n Matrix of values in E
one of S, U, or V, or a list containing one or more of these names
SmithForm[E](A) returns the Smith Normal Form S of A which satisfies:
(1) S[i,j] = 0 if i<>j
(2) S[i,i] is unit normal in E (implies uniqueness)
(3) S[i,i] | S[i+1,i+1] for all 1<=i<min(m,n)
(4) prod(S[i,i],i=1..d) = u*gcd(all minors of A of dimension d) where u is a unit
(5) S[i,i] = 0 for r < i <= min(m,n) where r is the rank of A
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 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 Smith form is computed by first computing H the Hermite form of A, then computing the Hermite form of the transpose of H. If the resulting matrix is not diagonal, often it is, then the above sequence of computations is repeated, usually once, until it is.
Z`0`,Z`1`,Z`+`,Z`-`,Z`*`,Z`=` ≔ 0,1,`+`,`-`,`*`,`=`:
ZGcdex ≔ igcdex:
ZQuo,ZRem ≔ iquo,irem:
ZUnitPart,ZEuclideanNorm ≔ sign,abs:
A ≔ Matrix⁡1,2,3,4,5,2,3,4,5,6,4,1,−2,−5,−2,−1,−4,−2,1,2
S ≔ SmithFormZ⁡A
U,V ≔ SmithFormZ⁡A,output='U','V'
Download Help Document