-
Notifications
You must be signed in to change notification settings - Fork 6
/
p_lse_solve.c
56 lines (51 loc) · 1.24 KB
/
p_lse_solve.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
#include "typedef.h"
#include "tools.h"
#include "matrix.h"
#include "getput.h"
int main (int argc, char *argv[])
{
matrix_TYP **A, **B, **X;
int i, prime, anz;
int Aanz, Banz;
read_header(argc, argv);
if(FILEANZ <= 0)
{
printf("usage: P_lse_solve 'file1' ['file2'] -p=prime\n");
printf("file1: matrix_TYP with matrix A\n");
printf("file2: matrix_TYP with matrix B\n");
printf("\n");
printf("If 'file2' is not given, B = 0\n");
printf("Solves the linear equations\n");
printf(" A * X = B\n");
printf("modulo the given prime (default 1949).\n");
printf("\n");
if (is_option('h')){
exit(0);
}
else{
exit(31);
}
}
A = mget_mat(FILENAMES[0], &Aanz);
if(FILEANZ > 1)
B = mget_mat(FILENAMES[1], &Banz);
else
{
B = (matrix_TYP **) malloc(1 *sizeof(matrix_TYP *));
B[0] = NULL;
}
prime = optionnumber('p');
if(prime == 0)
prime = 101;
X = p_lse_solve(A[0], B[0], &anz, prime);
if(B[0] != NULL){
put_mat(X[0], NULL, "solution of the inhomogenous equation", 0);
free_mat(X[0]);
}
for(i=1;i<anz;i++){
put_mat(X[i], NULL, "solution of the homogenous equation", 0);
free_mat(X[i]);
}
if (X!=NULL) free(X);
exit(0);
}