polylib: NormalForms.h File Reference

# NormalForms.h File Reference

Go to the source code of this file.

## Functions
void | Smith (Matrix *A, Matrix **U, Matrix **V, Matrix **Product)
| Smith : This function takes a Matrix A of dim n * l as its input and returns the three matrices U, V and Product such that A = U * Product * V, where U is an unimodular matrix of dimension n * n and V is an unimodular matrix of dimension l * l.
void | Hermite (Matrix *A, Matrix **H, Matrix **U)
| Hermite : This function takes a Matrix as its input and finds its HNF ( Left form ).

## Function Documentation

void Hermite | ( | Matrix * | A,
|  | Matrix ** | H,
|  | Matrix ** | U |
| ) |  |  |

Hermite : This function takes a Matrix as its input and finds its HNF ( Left form ).

Input : A Matrix A (The Matrix A is not necessarily a Polylib matrix. It is just a matrix as far as Hermite is concerned. It does not even check if the matrix is a Polylib matrix or not) Output : The Hnf matrix H and the Unimodular matrix U such that A = H * U.

We use Alan Darte's implementation of Hermite to compute the HNF. Alan Darte's implementation computes the Upper Triangular HNF. So We work on the fact that if A = H * U then A (transpose) = U(transpose) * H (transpose) There are a set of interface functions written in Interface.c which convert a matrix from Polylib representationt to that of Alan Darte's and vice versa.

This Function Does the Following Step 1 : Given the matrix A it finds its Transpose. Step 2 : Finds the HNF (Right Form) using Alan Darte's Algorithm. Step 3 : The H1 and U1 obtained in Step2 are both Transposed to get the actual H and U such that A = HU.

Definition at line 670 of file NormalForms.c.

References ConvertDarMattoPolMat(), ConvertPolMattoDarMat(), hermite(), identite(), Matrix_Copy(), Matrix_Free(), matrix::NbColumns, matrix::NbRows, Transpose(), transpose(), value_clear, and value_init.

Referenced by AffineHermite(), findHermiteBasis(), isfulldim(), RearrangeMatforSolveDio(), and SolveDiophantine().

void Smith | ( | Matrix * | A,
|  | Matrix ** | U,
|  | Matrix ** | V,
|  | Matrix ** | Product |
| ) |  |  |

Smith : This function takes a Matrix A of dim n * l as its input and returns the three matrices U, V and Product such that A = U * Product * V, where U is an unimodular matrix of dimension n * n and V is an unimodular matrix of dimension l * l.

Product is a diagonal matrix of dimension n * l.

We use Alan Darte's implementation of Smith for computing the Smith Normal Form

Definition at line 627 of file NormalForms.c.

References Identity(), Matrix_Copy(), Matrix_Free(), matrix::NbColumns, matrix::NbRows, matrix::p_Init, and smith().

Referenced by AffineSmith(), and Lattice2LatticeUnion().