-
Notifications
You must be signed in to change notification settings - Fork 6
/
elt.c
64 lines (55 loc) · 1.57 KB
/
elt.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include"typedef.h"
#include"tools.h"
#include"matrix.h"
#include"getput.h"
#include"longtools.h"
int main (int argc, char *argv[])
{
matrix_TYP **M, *Trf, *E;
int Manz, i;
read_header(argc, argv);
if(FILEANZ != 1)
{
printf("Usage: %s 'file' [-t]\n",argv[0]);
printf("\n");
printf("file: matrix_TYP containing a set of matrices\n");
printf("\n");
printf("Calculates the Smith normal form of the matrices\n");
printf("given in file, resp. the isomorphism type of the factor group of\n");
printf("two lattices, where the matrix is interpreted as the coordinate\n");
printf("columns of a generating set of the second lattice in terms of a\n");
printf("basis of the first one.\n");
printf("\n");
printf("CAUTION: If the given matrix is rational, the\n");
printf(" Smith normal form is calculated for the least\n");
printf(" integral multiple of it.\n");
printf("\n");
printf("Options:\n");
printf("-t : gives the left tranformation matrix as well.\n");
printf("\n");
if (is_option('h')){
exit(0);
}
else{
exit(31);
}
}
M = mget_mat(FILENAMES[0], &Manz);
for(i=0;i<Manz;i++)
{
if (!M[i]->flags.Integral) rat2kgv(M[i]);
if(is_option('t'))
Trf = init_mat(M[i]->rows, M[i]->rows, "1");
else
Trf = NULL;
E = long_elt_mat(Trf, M[i], NULL);
put_mat(E, NULL, "ELT of matrix", 0);
free_mat(E);
if(is_option('t'))
{
put_mat(Trf, NULL, "Transformtion matrix", 0);
free_mat(Trf);
}
}
exit(0);
}