IntegerSmithNormalForm

smith2.spad line 103 [edit on github]

This package computes Smith form of integer matrices. It is more efficinet than general case by first using elimination with unit pivots from UnitGaussianElimination.

completeSmith : (Matrix(Integer), Mapping(Record(Smith : Matrix(Integer), leftEqMat : Matrix(Integer), rightEqMat : Matrix(Integer)), Matrix(Integer))) -> Record(Smith : Matrix(Integer), leftEqMat : Matrix(Integer), rightEqMat : Matrix(Integer))

completeSmith(m, full) computes record containing Smith normal form of m and the left and right equivalence matrices. It first reduces m to smaller matrix and then uses full to finish.

smith : Matrix(Integer) -> Matrix(Integer)

smith(m) computes Smith normal form of m

smith : (Matrix(Integer), Mapping(Matrix(Integer), Matrix(Integer))) -> Matrix(Integer)

smith(m, full) computes Smith normal form of m. It first reduces m to smaller matrix and then uses full to finish.