GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
#include "typedef.h"1#include "matrix.h"2/**************************************************************************\3@---------------------------------------------------------------------------4@---------------------------------------------------------------------------5@ FILE: col_row_ops_mat.c6@---------------------------------------------------------------------------7@---------------------------------------------------------------------------8@9\**************************************************************************/1011/*{{{}}}*/12/*{{{ row_per*/13/*14@---------------------------------------------------------------------15@ void row_per( M, i, j );16@ matrix_TYP *M;17@ int i , j;18@19@ swaps the i. and j. row by swapping the pointers of the 2-dim. array20@---------------------------------------------------------------------21*/22void row_per(M, i, j)23matrix_TYP *M;24int i, j;25{26int *merk;2728merk = M->array.SZ[i];29M->array.SZ[i] = M->array.SZ[j];30M->array.SZ[j] = merk;31if ( M->array.N != NULL )32{33merk = M->array.N[i];34M->array.N[i] = M->array.N[j];35M->array.N[j] = merk;36}37M->flags.Symmetric = FALSE;38}3940/*}}} */41/*{{{ col_per*/42/*43@------------------------------------------------------------------------44@ void col_per(M, i, j);45@46@ same as row_per() for columns.47@------------------------------------------------------------------------48*/49void col_per(M, i, j)50matrix_TYP *M;51int i, j;52{53int k;54int merk;5556for(k=0; k < M->rows; k++)57{58merk = M->array.SZ[k][i];59M->array.SZ[k][i] = M->array.SZ[k][j];60M->array.SZ[k][j] = merk;61}62if ( M->array.N )63{64for(k=0; k < M->rows; k++)65{66merk = M->array.N[k][i];67M->array.N[k][i] = M->array.N[k][j];68M->array.N[k][j] = merk;69}70}71M->flags.Symmetric = FALSE;72}7374/*}}} */75/*{{{ row_add*/767778/**************************************************************************\79@---------------------------------------------------------------------------80@ void row_add(M, i, j, fac)81@ matrix_TYP *M;82@ int i, j, fac;83@84@ adds fac times the i-th row the the j-th85@---------------------------------------------------------------------------86@87\**************************************************************************/88void row_add(M, i, j, fac)89matrix_TYP *M;90int i, j, fac;91{92int k;9394for(k=0; k<M->cols; k++)95M->array.SZ[j][k] += M->array.SZ[i][k] * fac;96if ( M->prime != 0 ) {97for(k=0; k<M->cols; k++) {98M->array.SZ[j][k] %= M->prime;99if ( M->array.SZ[j][k] < 0 ) M->array.SZ[j][k] = -M->array.SZ[j][k];100}101} else {102if ( M->array.N != NULL )103for(k=0; k<M->cols; k++)104M->array.N[j][k] += M->array.N[i][k] * fac;105}106}107108/*}}} */109/*{{{ col_add*/110111/**************************************************************************\112@---------------------------------------------------------------------------113@ void row_col(M, i, j, fac)114@ matrix_TYP *M;115@ int i, j, fac;116@117@ adds fac times the i-th col the the j-th118@---------------------------------------------------------------------------119@120\**************************************************************************/121void col_add(M, i, j, fac)122matrix_TYP *M;123int i, j, fac;124{125int k;126127for(k=0; k<M->rows; k++)128M->array.SZ[k][j] += M->array.SZ[k][i] * fac;129if ( M->prime != 0 )130{131for(k=0; k<M->rows; k++)132{133M->array.SZ[k][j] %= M->prime;134if ( M->array.SZ[k][j] < 0 ) M->array.SZ[k][j] = -M->array.SZ[k][j];135}136}137else138{139if ( M->array.N != NULL )140for(k=0; k<M->rows; k++)141M->array.N[k][j] += M->array.N[k][i] * fac;142}143}144145/*}}} */146/*{{{ row_mul*/147148149/**************************************************************************\150@---------------------------------------------------------------------------151@ void row_mul(M, i, fac)152@ matrix_TYP *M;153@ int i, fac;154@155@ multiplies the i-th row with fac156@---------------------------------------------------------------------------157@158\**************************************************************************/159void row_mul(M, i, fac)160matrix_TYP *M;161int i, fac;162{163int k;164165for(k=0; k < M->cols; k++)166M->array.SZ[i][k] *= fac;167if ( M->prime != 0 )168{169for(k=0; k < M->cols; k++)170{171M->array.SZ[i][k] %= M->prime;172if ( M->array.SZ[i][k] < 0 ) M->array.SZ[i][k] = -M->array.SZ[i][k];173}174}175else176{177if ( M->array.N != NULL )178for(k=0; k < M->cols; k++)179M->array.N[i][k] *= fac;180}181}182183/*}}} */184/*{{{ col_mul*/185186/**************************************************************************\187@---------------------------------------------------------------------------188@ void col_mul(M, i, fac)189@ matrix_TYP *M;190@ int i, fac;191@192@ multiplies the i-th col with fac193@---------------------------------------------------------------------------194@195\**************************************************************************/196void col_mul(M, i, fac)197matrix_TYP *M;198int i, fac;199{200int k;201202for(k=0; k < M->rows; k++)203M->array.SZ[k][i] *= fac;204if (M->prime != 0 )205{206for(k=0; k < M->rows; k++)207{208M->array.SZ[k][i] %= M->prime;209if ( M->array.SZ[k][i] < 0 ) M->array.SZ[k][i] = -M->array.SZ[k][i];210}211}212else213{214if ( M->array.N != NULL )215for(k=0; k < M->rows; k++)216M->array.N[k][i] *= fac;217}218}219220/*}}} */221222223