Singular

D.15.25.49 smithNormalForm

Procedure from library `multigrading.lib` (see multigrading_lib).

Usage:
smithNormalForm(A[,opt]); intmat A

Purpose:
Computes the Smith Normal Form of A

Return:
if no optional argument is given: intmat, the Smith Normal Form of A, otherwise: a list of 3 integer matrices P, D Q, such that D == P*A*Q.

Example:
 ```LIB "multigrading.lib"; intmat A[5][7] = 1,0,1,0,-2,9,-71, 0,-24,248,-32,-96,448,-3496, 0,4,-42,4,-8,30,-260, 0,0,0,18,-90,408,-3168, 0,0,0,-32,224,-1008,7872; print( smithNormalForm(A) ); ==> 1 0 0 0 0 0 0 ==> 0 2 2 6 12 0 0 ==> 0 0 2 0 0 0 0 ==> 0 0 0 8 0 0 0 ==> 0 0 0 0 48 0 0 list l = smithNormalForm(A, 5); l; ==> [1]: ==> 1,0,0,0,0, ==> 0,0,1,0,0, ==> 0,-1,4,-1,0, ==> 0,3,-12,4,-1, ==> 0,-6,24,-8,3 ==> [2]: ==> 1,0,0,0,0,0,0, ==> 0,2,2,6,12,0,0, ==> 0,0,2,0,0,0,0, ==> 0,0,0,8,0,0,0, ==> 0,0,0,0,48,0,0 ==> [3]: ==> 1,5,45,187,384,8,18591, ==> 0,-52,-461,-1914,-3929,-82,-190555, ==> 0,-5,-53,-218,-445,-10,-23236, ==> 0,0,-28,-109,-215,-7,-16260, ==> 0,0,221,871,1729,53,123084, ==> 0,0,50,197,391,12,27876, ==> 0,0,0,0,0,0,1 l[1]*A*l[3]; ==> 1,0,0,0,0,0,0, ==> 0,2,2,6,12,0,0, ==> 0,0,2,0,0,0,0, ==> 0,0,0,8,0,0,0, ==> 0,0,0,0,48,0,0 det(l[1]); ==> 1 det(l[3]); ==> 1 ```