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

563580 views
1
#include "typedef.h"
2
#include "matrix.h"
3
/**************************************************************************\
4
@---------------------------------------------------------------------------
5
@---------------------------------------------------------------------------
6
@ FILE: col_row_ops_mat.c
7
@---------------------------------------------------------------------------
8
@---------------------------------------------------------------------------
9
@
10
\**************************************************************************/
11
12
/*{{{}}}*/
13
/*{{{ row_per*/
14
/*
15
@---------------------------------------------------------------------
16
@ void row_per( M, i, j );
17
@ matrix_TYP *M;
18
@ int i , j;
19
@
20
@ swaps the i. and j. row by swapping the pointers of the 2-dim. array
21
@---------------------------------------------------------------------
22
*/
23
void row_per(M, i, j)
24
matrix_TYP *M;
25
int i, j;
26
{
27
int *merk;
28
29
merk = M->array.SZ[i];
30
M->array.SZ[i] = M->array.SZ[j];
31
M->array.SZ[j] = merk;
32
if ( M->array.N != NULL )
33
{
34
merk = M->array.N[i];
35
M->array.N[i] = M->array.N[j];
36
M->array.N[j] = merk;
37
}
38
M->flags.Symmetric = FALSE;
39
}
40
41
/*}}} */
42
/*{{{ col_per*/
43
/*
44
@------------------------------------------------------------------------
45
@ void col_per(M, i, j);
46
@
47
@ same as row_per() for columns.
48
@------------------------------------------------------------------------
49
*/
50
void col_per(M, i, j)
51
matrix_TYP *M;
52
int i, j;
53
{
54
int k;
55
int merk;
56
57
for(k=0; k < M->rows; k++)
58
{
59
merk = M->array.SZ[k][i];
60
M->array.SZ[k][i] = M->array.SZ[k][j];
61
M->array.SZ[k][j] = merk;
62
}
63
if ( M->array.N )
64
{
65
for(k=0; k < M->rows; k++)
66
{
67
merk = M->array.N[k][i];
68
M->array.N[k][i] = M->array.N[k][j];
69
M->array.N[k][j] = merk;
70
}
71
}
72
M->flags.Symmetric = FALSE;
73
}
74
75
/*}}} */
76
/*{{{ row_add*/
77
78
79
/**************************************************************************\
80
@---------------------------------------------------------------------------
81
@ void row_add(M, i, j, fac)
82
@ matrix_TYP *M;
83
@ int i, j, fac;
84
@
85
@ adds fac times the i-th row the the j-th
86
@---------------------------------------------------------------------------
87
@
88
\**************************************************************************/
89
void row_add(M, i, j, fac)
90
matrix_TYP *M;
91
int i, j, fac;
92
{
93
int k;
94
95
for(k=0; k<M->cols; k++)
96
M->array.SZ[j][k] += M->array.SZ[i][k] * fac;
97
if ( M->prime != 0 ) {
98
for(k=0; k<M->cols; k++) {
99
M->array.SZ[j][k] %= M->prime;
100
if ( M->array.SZ[j][k] < 0 ) M->array.SZ[j][k] = -M->array.SZ[j][k];
101
}
102
} else {
103
if ( M->array.N != NULL )
104
for(k=0; k<M->cols; k++)
105
M->array.N[j][k] += M->array.N[i][k] * fac;
106
}
107
}
108
109
/*}}} */
110
/*{{{ col_add*/
111
112
/**************************************************************************\
113
@---------------------------------------------------------------------------
114
@ void row_col(M, i, j, fac)
115
@ matrix_TYP *M;
116
@ int i, j, fac;
117
@
118
@ adds fac times the i-th col the the j-th
119
@---------------------------------------------------------------------------
120
@
121
\**************************************************************************/
122
void col_add(M, i, j, fac)
123
matrix_TYP *M;
124
int i, j, fac;
125
{
126
int k;
127
128
for(k=0; k<M->rows; k++)
129
M->array.SZ[k][j] += M->array.SZ[k][i] * fac;
130
if ( M->prime != 0 )
131
{
132
for(k=0; k<M->rows; k++)
133
{
134
M->array.SZ[k][j] %= M->prime;
135
if ( M->array.SZ[k][j] < 0 ) M->array.SZ[k][j] = -M->array.SZ[k][j];
136
}
137
}
138
else
139
{
140
if ( M->array.N != NULL )
141
for(k=0; k<M->rows; k++)
142
M->array.N[k][j] += M->array.N[k][i] * fac;
143
}
144
}
145
146
/*}}} */
147
/*{{{ row_mul*/
148
149
150
/**************************************************************************\
151
@---------------------------------------------------------------------------
152
@ void row_mul(M, i, fac)
153
@ matrix_TYP *M;
154
@ int i, fac;
155
@
156
@ multiplies the i-th row with fac
157
@---------------------------------------------------------------------------
158
@
159
\**************************************************************************/
160
void row_mul(M, i, fac)
161
matrix_TYP *M;
162
int i, fac;
163
{
164
int k;
165
166
for(k=0; k < M->cols; k++)
167
M->array.SZ[i][k] *= fac;
168
if ( M->prime != 0 )
169
{
170
for(k=0; k < M->cols; k++)
171
{
172
M->array.SZ[i][k] %= M->prime;
173
if ( M->array.SZ[i][k] < 0 ) M->array.SZ[i][k] = -M->array.SZ[i][k];
174
}
175
}
176
else
177
{
178
if ( M->array.N != NULL )
179
for(k=0; k < M->cols; k++)
180
M->array.N[i][k] *= fac;
181
}
182
}
183
184
/*}}} */
185
/*{{{ col_mul*/
186
187
/**************************************************************************\
188
@---------------------------------------------------------------------------
189
@ void col_mul(M, i, fac)
190
@ matrix_TYP *M;
191
@ int i, fac;
192
@
193
@ multiplies the i-th col with fac
194
@---------------------------------------------------------------------------
195
@
196
\**************************************************************************/
197
void col_mul(M, i, fac)
198
matrix_TYP *M;
199
int i, fac;
200
{
201
int k;
202
203
for(k=0; k < M->rows; k++)
204
M->array.SZ[k][i] *= fac;
205
if (M->prime != 0 )
206
{
207
for(k=0; k < M->rows; k++)
208
{
209
M->array.SZ[k][i] %= M->prime;
210
if ( M->array.SZ[k][i] < 0 ) M->array.SZ[k][i] = -M->array.SZ[k][i];
211
}
212
}
213
else
214
{
215
if ( M->array.N != NULL )
216
for(k=0; k < M->rows; k++)
217
M->array.N[k][i] *= fac;
218
}
219
}
220
221
/*}}} */
222
223