My Project  debian-1:4.1.1-p2+ds-4build2
Public Member Functions | Private Member Functions | Private Attributes
mp_permmatrix Class Reference

Public Member Functions

 mp_permmatrix ()
 
 mp_permmatrix (matrix, ring)
 
 mp_permmatrix (mp_permmatrix *)
 
 ~mp_permmatrix ()
 
int mpGetRow ()
 
int mpGetCol ()
 
int mpGetRdim ()
 
int mpGetCdim ()
 
int mpGetSign ()
 
void mpSetSearch (int s)
 
void mpSaveArray ()
 
poly mpGetElem (int, int)
 
void mpSetElem (poly, int, int)
 
void mpDelElem (int, int)
 
void mpElimBareiss (poly)
 
int mpPivotBareiss (row_col_weight *)
 
int mpPivotRow (row_col_weight *, int)
 
void mpToIntvec (intvec *)
 
void mpRowReorder ()
 
void mpColReorder ()
 

Private Member Functions

void mpInitMat ()
 
poly * mpRowAdr (int r)
 
poly * mpColAdr (int c)
 
void mpRowWeight (float *)
 
void mpColWeight (float *)
 
void mpRowSwap (int, int)
 
void mpColSwap (int, int)
 

Private Attributes

int a_m
 
int a_n
 
int s_m
 
int s_n
 
int sign
 
int piv_s
 
int * qrow
 
int * qcol
 
poly * Xarray
 
ring _R
 

Detailed Description

Definition at line 825 of file matpol.cc.

Constructor & Destructor Documentation

◆ mp_permmatrix() [1/3]

mp_permmatrix::mp_permmatrix ( )
inline

Definition at line 842 of file matpol.cc.

842 : a_m(0) {}

◆ mp_permmatrix() [2/3]

mp_permmatrix::mp_permmatrix ( matrix  A,
ring  R 
)

Definition at line 863 of file matpol.cc.

863  : sign(1)
864 {
865  a_m = A->nrows;
866  a_n = A->ncols;
867  this->mpInitMat();
868  Xarray = A->m;
869  _R=R;
870 }

◆ mp_permmatrix() [3/3]

mp_permmatrix::mp_permmatrix ( mp_permmatrix M)

Definition at line 872 of file matpol.cc.

873 {
874  poly p, *athis, *aM;
875  int i, j;
876 
877  _R=M->_R;
878  a_m = M->s_m;
879  a_n = M->s_n;
880  sign = M->sign;
881  this->mpInitMat();
882  Xarray = (poly *)omAlloc0(a_m*a_n*sizeof(poly));
883  for (i=a_m-1; i>=0; i--)
884  {
885  athis = this->mpRowAdr(i);
886  aM = M->mpRowAdr(i);
887  for (j=a_n-1; j>=0; j--)
888  {
889  p = aM[M->qcol[j]];
890  if (p)
891  {
892  athis[j] = p_Copy(p,_R);
893  }
894  }
895  }
896 }

◆ ~mp_permmatrix()

mp_permmatrix::~mp_permmatrix ( )

Definition at line 898 of file matpol.cc.

899 {
900  int k;
901 
902  if (a_m != 0)
903  {
904  omFreeSize((ADDRESS)qrow,a_m*sizeof(int));
905  omFreeSize((ADDRESS)qcol,a_n*sizeof(int));
906  if (Xarray != NULL)
907  {
908  for (k=a_m*a_n-1; k>=0; k--)
909  p_Delete(&Xarray[k],_R);
910  omFreeSize((ADDRESS)Xarray,a_m*a_n*sizeof(poly));
911  }
912  }
913 }

Member Function Documentation

◆ mpColAdr()

poly* mp_permmatrix::mpColAdr ( int  c)
inlineprivate

Definition at line 835 of file matpol.cc.

836  { return &(Xarray[qcol[c]]); }

◆ mpColReorder()

void mp_permmatrix::mpColReorder ( )

Definition at line 998 of file matpol.cc.

999 {
1000  int k, j, j1, j2;
1001 
1002  if (a_n > a_m)
1003  k = a_n - a_m;
1004  else
1005  k = 0;
1006  for (j=a_n-1; j>=k; j--)
1007  {
1008  j1 = qcol[j];
1009  if (j1 != j)
1010  {
1011  this->mpColSwap(j1, j);
1012  j2 = 0;
1013  while (qcol[j2] != j) j2++;
1014  qcol[j2] = j1;
1015  }
1016  }
1017 }

◆ mpColSwap()

void mp_permmatrix::mpColSwap ( int  j1,
int  j2 
)
private

Definition at line 971 of file matpol.cc.

972 {
973  poly p, *a1, *a2;
974  int i, k = a_n*a_m;
975 
976  a1 = &(Xarray[j1]);
977  a2 = &(Xarray[j2]);
978  for (i=0; i< k; i+=a_n)
979  {
980  p = a1[i];
981  a1[i] = a2[i];
982  a2[i] = p;
983  }
984 }

◆ mpColWeight()

void mp_permmatrix::mpColWeight ( float *  wcol)
private

Definition at line 917 of file matpol.cc.

918 {
919  poly p, *a;
920  int i, j;
921  float count;
922 
923  for (j=s_n; j>=0; j--)
924  {
925  a = this->mpColAdr(j);
926  count = 0.0;
927  for(i=s_m; i>=0; i--)
928  {
929  p = a[a_n*qrow[i]];
930  if (p)
931  count += mp_PolyWeight(p,_R);
932  }
933  wcol[j] = count;
934  }
935 }

◆ mpDelElem()

void mp_permmatrix::mpDelElem ( int  ,
int   
)

◆ mpElimBareiss()

void mp_permmatrix::mpElimBareiss ( poly  div)

Definition at line 1144 of file matpol.cc.

1145 {
1146  poly piv, elim, q1, q2, *ap, *a;
1147  int i, j, jj;
1148 
1149  ap = this->mpRowAdr(s_m);
1150  piv = ap[qcol[s_n]];
1151  for(i=s_m-1; i>=0; i--)
1152  {
1153  a = this->mpRowAdr(i);
1154  elim = a[qcol[s_n]];
1155  if (elim != NULL)
1156  {
1157  elim = p_Neg(elim,_R);
1158  for (j=s_n-1; j>=0; j--)
1159  {
1160  q2 = NULL;
1161  jj = qcol[j];
1162  if (ap[jj] != NULL)
1163  {
1164  q2 = SM_MULT(ap[jj], elim, div,_R);
1165  if (a[jj] != NULL)
1166  {
1167  q1 = SM_MULT(a[jj], piv, div,_R);
1168  p_Delete(&a[jj],_R);
1169  q2 = p_Add_q(q2, q1, _R);
1170  }
1171  }
1172  else if (a[jj] != NULL)
1173  {
1174  q2 = SM_MULT(a[jj], piv, div, _R);
1175  }
1176  if ((q2!=NULL) && div)
1177  SM_DIV(q2, div, _R);
1178  a[jj] = q2;
1179  }
1180  p_Delete(&a[qcol[s_n]], _R);
1181  }
1182  else
1183  {
1184  for (j=s_n-1; j>=0; j--)
1185  {
1186  jj = qcol[j];
1187  if (a[jj] != NULL)
1188  {
1189  q2 = SM_MULT(a[jj], piv, div, _R);
1190  p_Delete(&a[jj], _R);
1191  if (div)
1192  SM_DIV(q2, div, _R);
1193  a[jj] = q2;
1194  }
1195  }
1196  }
1197  }
1198 }

◆ mpGetCdim()

int mp_permmatrix::mpGetCdim ( )
inline

Definition at line 849 of file matpol.cc.

849 { return s_n; }

◆ mpGetCol()

int mp_permmatrix::mpGetCol ( )

◆ mpGetElem()

poly mp_permmatrix::mpGetElem ( int  r,
int  c 
)

Definition at line 1136 of file matpol.cc.

1137 {
1138  return Xarray[a_n*qrow[r]+qcol[c]];
1139 }

◆ mpGetRdim()

int mp_permmatrix::mpGetRdim ( )
inline

Definition at line 848 of file matpol.cc.

848 { return s_m; }

◆ mpGetRow()

int mp_permmatrix::mpGetRow ( )

◆ mpGetSign()

int mp_permmatrix::mpGetSign ( )
inline

Definition at line 850 of file matpol.cc.

850 { return sign; }

◆ mpInitMat()

void mp_permmatrix::mpInitMat ( )
private

Definition at line 985 of file matpol.cc.

986 {
987  int k;
988 
989  s_m = a_m;
990  s_n = a_n;
991  piv_s = 0;
992  qrow = (int *)omAlloc(a_m*sizeof(int));
993  qcol = (int *)omAlloc(a_n*sizeof(int));
994  for (k=a_m-1; k>=0; k--) qrow[k] = k;
995  for (k=a_n-1; k>=0; k--) qcol[k] = k;
996 }

◆ mpPivotBareiss()

int mp_permmatrix::mpPivotBareiss ( row_col_weight C)

Definition at line 1059 of file matpol.cc.

1060 {
1061  poly p, *a;
1062  int i, j, iopt, jopt;
1063  float sum, f1, f2, fo, r, ro, lp;
1064  float *dr = C->wrow, *dc = C->wcol;
1065 
1066  fo = 1.0e20;
1067  ro = 0.0;
1068  iopt = jopt = -1;
1069 
1070  s_n--;
1071  s_m--;
1072  if (s_m == 0)
1073  return 0;
1074  if (s_n == 0)
1075  {
1076  for(i=s_m; i>=0; i--)
1077  {
1078  p = this->mpRowAdr(i)[qcol[0]];
1079  if (p)
1080  {
1081  f1 = mp_PolyWeight(p,_R);
1082  if (f1 < fo)
1083  {
1084  fo = f1;
1085  if (iopt >= 0)
1086  p_Delete(&(this->mpRowAdr(iopt)[qcol[0]]),_R);
1087  iopt = i;
1088  }
1089  else
1090  p_Delete(&(this->mpRowAdr(i)[qcol[0]]),_R);
1091  }
1092  }
1093  if (iopt >= 0)
1094  mpReplace(iopt, s_m, sign, qrow);
1095  return 0;
1096  }
1097  this->mpRowWeight(dr);
1098  this->mpColWeight(dc);
1099  sum = 0.0;
1100  for(i=s_m; i>=0; i--)
1101  sum += dr[i];
1102  for(i=s_m; i>=0; i--)
1103  {
1104  r = dr[i];
1105  a = this->mpRowAdr(i);
1106  for(j=s_n; j>=0; j--)
1107  {
1108  p = a[qcol[j]];
1109  if (p)
1110  {
1111  lp = mp_PolyWeight(p,_R);
1112  ro = r - lp;
1113  f1 = ro * (dc[j]-lp);
1114  if (f1 != 0.0)
1115  {
1116  f2 = lp * (sum - ro - dc[j]);
1117  f2 += f1;
1118  }
1119  else
1120  f2 = lp-r-dc[j];
1121  if (f2 < fo)
1122  {
1123  fo = f2;
1124  iopt = i;
1125  jopt = j;
1126  }
1127  }
1128  }
1129  }
1130  if (iopt < 0)
1131  return 0;
1132  mpReplace(iopt, s_m, sign, qrow);
1133  mpReplace(jopt, s_n, sign, qcol);
1134  return 1;
1135 }

◆ mpPivotRow()

int mp_permmatrix::mpPivotRow ( row_col_weight ,
int   
)

◆ mpRowAdr()

poly* mp_permmatrix::mpRowAdr ( int  r)
inlineprivate

Definition at line 833 of file matpol.cc.

834  { return &(Xarray[a_n*qrow[r]]); }

◆ mpRowReorder()

void mp_permmatrix::mpRowReorder ( )

Definition at line 1019 of file matpol.cc.

1020 {
1021  int k, i, i1, i2;
1022 
1023  if (a_m > a_n)
1024  k = a_m - a_n;
1025  else
1026  k = 0;
1027  for (i=a_m-1; i>=k; i--)
1028  {
1029  i1 = qrow[i];
1030  if (i1 != i)
1031  {
1032  this->mpRowSwap(i1, i);
1033  i2 = 0;
1034  while (qrow[i2] != i) i2++;
1035  qrow[i2] = i1;
1036  }
1037  }
1038 }

◆ mpRowSwap()

void mp_permmatrix::mpRowSwap ( int  i1,
int  i2 
)
private

Definition at line 956 of file matpol.cc.

957 {
958  poly p, *a1, *a2;
959  int j;
960 
961  a1 = &(Xarray[a_n*i1]);
962  a2 = &(Xarray[a_n*i2]);
963  for (j=a_n-1; j>= 0; j--)
964  {
965  p = a1[j];
966  a1[j] = a2[j];
967  a2[j] = p;
968  }
969 }

◆ mpRowWeight()

void mp_permmatrix::mpRowWeight ( float *  wrow)
private

Definition at line 936 of file matpol.cc.

937 {
938  poly p, *a;
939  int i, j;
940  float count;
941 
942  for (i=s_m; i>=0; i--)
943  {
944  a = this->mpRowAdr(i);
945  count = 0.0;
946  for(j=s_n; j>=0; j--)
947  {
948  p = a[qcol[j]];
949  if (p)
950  count += mp_PolyWeight(p,_R);
951  }
952  wrow[i] = count;
953  }
954 }

◆ mpSaveArray()

void mp_permmatrix::mpSaveArray ( )
inline

Definition at line 852 of file matpol.cc.

852 { Xarray = NULL; }

◆ mpSetElem()

void mp_permmatrix::mpSetElem ( poly  ,
int  ,
int   
)

◆ mpSetSearch()

void mp_permmatrix::mpSetSearch ( int  s)

◆ mpToIntvec()

void mp_permmatrix::mpToIntvec ( intvec )

Field Documentation

◆ _R

ring mp_permmatrix::_R
private

Definition at line 831 of file matpol.cc.

◆ a_m

int mp_permmatrix::a_m
private

Definition at line 828 of file matpol.cc.

◆ a_n

int mp_permmatrix::a_n
private

Definition at line 828 of file matpol.cc.

◆ piv_s

int mp_permmatrix::piv_s
private

Definition at line 828 of file matpol.cc.

◆ qcol

int * mp_permmatrix::qcol
private

Definition at line 829 of file matpol.cc.

◆ qrow

int* mp_permmatrix::qrow
private

Definition at line 829 of file matpol.cc.

◆ s_m

int mp_permmatrix::s_m
private

Definition at line 828 of file matpol.cc.

◆ s_n

int mp_permmatrix::s_n
private

Definition at line 828 of file matpol.cc.

◆ sign

int mp_permmatrix::sign
private

Definition at line 828 of file matpol.cc.

◆ Xarray

poly* mp_permmatrix::Xarray
private

Definition at line 830 of file matpol.cc.


The documentation for this class was generated from the following file:
j
int j
Definition: facHensel.cc:105
k
int k
Definition: cfEzgcd.cc:92
SM_MULT
#define SM_MULT
Definition: sparsmat.h:23
ADDRESS
void * ADDRESS
Definition: auxiliary.h:133
mp_permmatrix::a_m
int a_m
Definition: matpol.cc:828
mp_permmatrix::mpColWeight
void mpColWeight(float *)
Definition: matpol.cc:917
p_Neg
static poly p_Neg(poly p, const ring r)
Definition: p_polys.h:1043
mp_permmatrix::mpColAdr
poly * mpColAdr(int c)
Definition: matpol.cc:835
mp_permmatrix::s_m
int s_m
Definition: matpol.cc:828
mp_permmatrix::mpRowWeight
void mpRowWeight(float *)
Definition: matpol.cc:936
mp_permmatrix::mpRowAdr
poly * mpRowAdr(int r)
Definition: matpol.cc:833
mp_permmatrix::qcol
int * qcol
Definition: matpol.cc:829
ap
Definition: ap.h:39
mp_permmatrix::mpInitMat
void mpInitMat()
Definition: matpol.cc:985
mp_permmatrix::qrow
int * qrow
Definition: matpol.cc:829
mp_permmatrix::_R
ring _R
Definition: matpol.cc:831
p_Copy
static poly p_Copy(poly p, const ring r)
returns a copy of p
Definition: p_polys.h:812
mpReplace
static void mpReplace(int j, int n, int &sign, int *perm)
Definition: matpol.cc:1044
i
int i
Definition: cfEzgcd.cc:125
SM_DIV
#define SM_DIV
Definition: sparsmat.h:24
M
#define M
Definition: sirandom.c:24
omFreeSize
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
mp_permmatrix::s_n
int s_n
Definition: matpol.cc:828
row_col_weight::wcol
float * wcol
Definition: matpol.cc:793
ip_smatrix::m
poly * m
Definition: matpol.h:20
omAlloc
#define omAlloc(size)
Definition: omAllocDecl.h:210
row_col_weight::wrow
float * wrow
Definition: matpol.cc:793
mp_permmatrix::mpColSwap
void mpColSwap(int, int)
Definition: matpol.cc:971
mp_permmatrix::mpRowSwap
void mpRowSwap(int, int)
Definition: matpol.cc:956
div
CF_NO_INLINE CanonicalForm div(const CanonicalForm &, const CanonicalForm &)
CF_INLINE CanonicalForm div, mod ( const CanonicalForm & lhs, const CanonicalForm & rhs )
Definition: cf_inline.cc:553
p_Delete
static void p_Delete(poly *p, const ring r)
Definition: p_polys.h:857
p_Add_q
static poly p_Add_q(poly p, poly q, const ring r)
Definition: p_polys.h:892
mp_permmatrix::sign
int sign
Definition: matpol.cc:828
mp_permmatrix::a_n
int a_n
Definition: matpol.cc:828
NULL
#define NULL
Definition: omList.c:10
mp_permmatrix::piv_s
int piv_s
Definition: matpol.cc:828
R
#define R
Definition: sirandom.c:26
p
int p
Definition: cfModGcd.cc:4019
count
int status int void size_t count
Definition: si_signals.h:59
mp_permmatrix::Xarray
poly * Xarray
Definition: matpol.cc:830
mp_PolyWeight
static float mp_PolyWeight(poly p, const ring r)
Definition: matpol.cc:1202
A
#define A
Definition: sirandom.c:23
omAlloc0
#define omAlloc0(size)
Definition: omAllocDecl.h:211