Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

563603 views
1
#include "typedef.h"
2
#include "matrix.h"
3
4
5
fund_domain *first_fuber(mauern, anz)
6
wall_TYP **mauern;
7
int anz;
8
{
9
int i,j,k,p;
10
int s, n;
11
12
fund_domain *erg;
13
matrix_TYP *M, *A, *v, *tmp_v;
14
int *take;
15
int test;
16
wall_TYP *vec;
17
18
extern fund_domain *init_fund_domain();
19
extern vertex_TYP *init_vertex_fuber();
20
extern wall_TYP *init_wall_fuber();
21
extern int row_gauss();
22
extern matrix_TYP *solve_mat();
23
extern matrix_TYP *init_mat();
24
25
test = 0;
26
n = mauern[0]->dim;
27
M = init_mat(n, n, "");
28
take = (int *)malloc(anz *sizeof(int));
29
30
M->rows = 0;
31
i=0;
32
while(M->rows != n && i < anz)
33
{
34
for(j=0;j<n;j++)
35
M->array.SZ[M->rows][j] = mauern[i]->gl[j];
36
M->rows++;
37
s = row_gauss(M);
38
if(s == M->rows)
39
take[i] = TRUE;
40
else
41
{
42
take[i] = FALSE;
43
M->rows--;
44
}
45
i++;
46
}
47
if(M->rows != n)
48
{
49
free_mat(M);
50
free(take);
51
return(NULL);
52
}
53
54
erg = init_fund_domain(n, n);
55
erg->is_finite = FALSE;
56
erg->is_closed = FALSE;
57
for(i=0; i<n;i++)
58
{
59
erg->vert[i] = init_vertex_fuber(n, n-1);
60
erg->wall[i] = init_wall_fuber(n);
61
}
62
k = 0;
63
for(i=0;i<anz && k<n;i++)
64
{
65
if(take[i] == TRUE)
66
{
67
for(j=0;j<n;j++)
68
erg->wall[k]->gl[j] = mauern[i]->gl[j];
69
70
/* geaendert am 08.11.94jk: Information ueber die korrespondierende Matrix
71
sollten uebernommen werden */
72
erg->wall[k]->nproduct = mauern[i]->nproduct;
73
erg->wall[k]->product = (int*) malloc (sizeof(int)*mauern[i]->nproduct);
74
for (j=0;j<mauern[i]->nproduct;j++)
75
erg->wall[k]->product[j] = mauern[i]->product[j];
76
/* Ende der Aenderung */
77
k++;
78
}
79
}
80
for(i=0;i<n;i++)
81
{
82
k = 0;
83
for(j=0;j<n;j++)
84
{
85
if(j != i)
86
{ erg->vert[i]->wall[k] = j; k++;}
87
}
88
}
89
90
A = init_mat(n-1, n, "l");
91
for(i=0;i<n;i++)
92
{
93
p=0;
94
for(j=0; j<n;j++)
95
{
96
if(i != j)
97
{
98
for(k=0;k<n;k++)
99
A->array.SZ[p][k] = erg->wall[j]->gl[k];
100
p++;
101
}
102
}
103
104
/* changed on 16/12/96 tilman. The function solve didn't exist
105
anymore, so I used solve_mat */
106
tmp_v = solve_mat(A);
107
v = tr_pose(tmp_v);
108
free_mat(tmp_v);
109
110
for(j=0;j<n;j++)
111
erg->vert[i]->v[j] = v->array.SZ[j][0];
112
free_mat(v);
113
test = wall_times_vertex_fuber(erg->wall[i], erg->vert[i]);
114
if(test < 0)
115
{
116
for(j=0;j<n;j++)
117
erg->vert[i]->v[j] = -erg->vert[i]->v[j];
118
}
119
}
120
121
M->rows = n;
122
free_mat(M);
123
free_mat(A);
124
free(take);
125
return(erg);
126
}
127
/*{{{}}}*/
128
129