My Project  UNKNOWN_GIT_VERSION
Public Member Functions | Private Attributes
gaussReducer Class Reference

#include <fglmgauss.h>

Public Member Functions

 gaussReducer (int dimen)
 
 ~gaussReducer ()
 
BOOLEAN reduce (fglmVector v)
 
void store ()
 
fglmVector getDependence ()
 

Private Attributes

gaussElemelems
 
BOOLEANisPivot
 
int * perm
 
fglmVector v
 
fglmVector p
 
number pdenom
 
int size
 
int max
 

Detailed Description

Definition at line 18 of file fglmgauss.h.

Constructor & Destructor Documentation

◆ gaussReducer()

gaussReducer::gaussReducer ( int  dimen)

Definition at line 58 of file fglmgauss.cc.

59 {
60  int k;
61  size= 0;
62  max= dimen;
63 #ifndef HAVE_EXPLICIT_CONSTR
64  elems= new gaussElem[ max+1 ];
65 #else
66  elems= (gaussElem *)omAlloc( (max+1)*sizeof( gaussElem ) );
67 #endif
68  isPivot= (BOOLEAN *)omAlloc( (max+1)*sizeof( BOOLEAN ) );
69  for ( k= max; k > 0; k-- )
70  isPivot[k]= FALSE;
71  perm= (int *)omAlloc( (max+1)*sizeof( int ) );
72 }

◆ ~gaussReducer()

gaussReducer::~gaussReducer ( )

Definition at line 74 of file fglmgauss.cc.

75 {
76 #ifndef HAVE_EXPLICIT_CONSTR
77  delete [] elems;
78 #else
79  int k;
80  for ( k= size; k > 0; k-- )
81  elems[k].~gaussElem();
82  omFreeSize( (ADDRESS)elems, (max+1)*sizeof( gaussElem ) );
83 #endif
84 
85  omFreeSize( (ADDRESS)isPivot, (max+1)*sizeof( BOOLEAN ) );
86  omFreeSize( (ADDRESS)perm, (max+1)*sizeof( int ) );
87 }

Member Function Documentation

◆ getDependence()

fglmVector gaussReducer::getDependence ( )

Definition at line 197 of file fglmgauss.cc.

198 {
199  nDelete( & pdenom );
200  // hier kann p noch gekuerzt werden, je nach Charakteristik
201  fglmVector result = p;
202  p= fglmVector();
203  return ( result );
204 }

◆ reduce()

BOOLEAN gaussReducer::reduce ( fglmVector  v)

Definition at line 90 of file fglmgauss.cc.

91 {
92  number fac1, fac2;
93  number temp;
94  // Hier ueberlegen, ob thev als referenz, oder wie wann was kopiert usw.
95  v= thev;
96  p= fglmVector( size + 1, size + 1 );
97  // fglmASSERT( pdenom == NULL );
98  pdenom= nInit( 1 );
99  number vdenom = v.clearDenom();
100  if ( ! nIsOne( vdenom ) && ! nIsZero( vdenom ) ) {
101  p.setelem( p.size(), vdenom );
102  }
103  else {
104  nDelete( & vdenom );
105  }
106  number gcd = v.gcd();
107  if ( ! nIsOne( gcd ) && ! nIsZero( gcd ) ) {
108  v /= gcd;
109  number temp= nMult( pdenom, gcd );
110  nDelete( & pdenom );
111  pdenom= temp;
112  }
113  nDelete( & gcd );
114 
115  int k;
116  for ( k= 1; k <= size; k++ ) {
117  if ( ! v.elemIsZero( perm[k] ) ) {
118  fac1= elems[k].fac;
119  fac2= nCopy( v.getconstelem( perm[k] ) );
120  v.nihilate( fac1, fac2, elems[k].v );
121  fac1= nMult( fac1, elems[k].pdenom );
122  temp= nMult( fac2, pdenom );
123  nDelete( & fac2 );
124  fac2= temp;
125  p.nihilate( fac1, fac2, elems[k].p );
126  temp= nMult( pdenom, elems[k].pdenom );
127  nDelete( & pdenom );
128  pdenom= temp;
129 
130  nDelete( & fac1 );
131  nDelete( & fac2 );
132  number gcd = v.gcd();
133  if ( ! nIsOne( gcd ) && ! nIsZero( gcd ) )
134  {
135  v/= gcd;
136  number temp = nMult( pdenom, gcd );
137  nDelete( & pdenom );
138  pdenom= temp;
139  }
140  nDelete( & gcd );
141  gcd= p.gcd();
142  temp= n_SubringGcd( pdenom, gcd, currRing->cf );
143  nDelete( & gcd );
144  gcd= temp;
145  if ( ! nIsZero( gcd ) && ! nIsOne( gcd ) )
146  {
147  p/= gcd;
148  temp= nDiv( pdenom, gcd );
149  nDelete( & pdenom );
150  pdenom= temp;
151  nNormalize( pdenom );
152  }
153  nDelete( & gcd );
154  }
155  }
156  return ( v.isZero() );
157 }

◆ store()

void gaussReducer::store ( )

Definition at line 160 of file fglmgauss.cc.

161 {
162  // fglmASSERT( size < max );
163  // number fac;
164  // find the pivot-element in v:
165 
166  size++;
167  int k= 1;
168  while ( nIsZero(v.getconstelem(k)) || isPivot[k] ) {
169  k++;
170  }
171  // fglmASSERT( k <= dimen, "Error(1) in fglmDdata::pivot-search");
172  number pivot= v.getconstelem( k );
173  int pivotcol = k;
174  k++;
175  while ( k <= max ) {
176  if ( ! nIsZero( v.getconstelem(k) ) && ! isPivot[k] ) {
177  if ( nGreater( v.getconstelem( k ), pivot ) ) {
178  pivot= v.getconstelem( k );
179  pivotcol= k;
180  }
181  }
182  k++;
183  }
184  // fglmASSERT( ! nIsZero( pivot ), "Error(2) fglmDdata::Pivotelement ist Null" );
185  isPivot[ pivotcol ]= TRUE;
186  perm[size]= pivotcol;
187 
188  pivot= nCopy( v.getconstelem( pivotcol ) );
189 #ifndef HAVE_EXPLICIT_CONSTR
190  elems[size].mac_gaussElem( v, p, pdenom, pivot );
191 #else
192  elems[size].gaussElem( v, p, pdenom, pivot );
193 #endif
194 }

Field Documentation

◆ elems

gaussElem* gaussReducer::elems
private

Definition at line 21 of file fglmgauss.h.

◆ isPivot

BOOLEAN* gaussReducer::isPivot
private

Definition at line 22 of file fglmgauss.h.

◆ max

int gaussReducer::max
private

Definition at line 28 of file fglmgauss.h.

◆ p

fglmVector gaussReducer::p
private

Definition at line 25 of file fglmgauss.h.

◆ pdenom

number gaussReducer::pdenom
private

Definition at line 26 of file fglmgauss.h.

◆ perm

int* gaussReducer::perm
private

Definition at line 23 of file fglmgauss.h.

◆ size

int gaussReducer::size
private

Definition at line 27 of file fglmgauss.h.

◆ v

fglmVector gaussReducer::v
private

Definition at line 24 of file fglmgauss.h.


The documentation for this class was generated from the following files:
FALSE
#define FALSE
Definition: auxiliary.h:94
nNormalize
#define nNormalize(n)
Definition: numbers.h:31
fglmVector::clearDenom
number clearDenom()
Definition: fglmvec.cc:503
fglmVector::isZero
int isZero()
Definition: fglmvec.cc:296
gaussReducer::elems
gaussElem * elems
Definition: fglmgauss.h:21
k
int k
Definition: cfEzgcd.cc:92
result
return result
Definition: facAbsBiFact.cc:76
nGreater
#define nGreater(a, b)
Definition: numbers.h:29
ADDRESS
void * ADDRESS
Definition: auxiliary.h:133
gaussReducer::isPivot
BOOLEAN * isPivot
Definition: fglmgauss.h:22
fglmVector
Definition: fglmvec.h:19
gaussElem::gaussElem
gaussElem(const fglmVector newv, const fglmVector newp, number &newpdenom, number &newfac)
Definition: fglmgauss.cc:33
gaussReducer::size
int size
Definition: fglmgauss.h:27
currRing
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:13
TRUE
#define TRUE
Definition: auxiliary.h:98
nIsOne
#define nIsOne(n)
Definition: numbers.h:26
fglmVector::setelem
void setelem(int i, number &n)
Definition: fglmvec.cc:452
omFreeSize
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
gaussElem::fac
number fac
Definition: fglmgauss.cc:32
BOOLEAN
int BOOLEAN
Definition: auxiliary.h:85
gaussReducer::perm
int * perm
Definition: fglmgauss.h:23
pivot
bool pivot(const matrix aMat, const int r1, const int r2, const int c1, const int c2, int *bestR, int *bestC, const ring R)
This code computes a score for each non-zero matrix entry in aMat[r1..r2, c1..c2].
Definition: linearAlgebra.cc:68
omAlloc
#define omAlloc(size)
Definition: omAllocDecl.h:210
gaussReducer::max
int max
Definition: fglmgauss.h:28
nDiv
#define nDiv(a, b)
Definition: numbers.h:33
fglmVector::nihilate
void nihilate(const number fac1, const number fac2, const fglmVector v)
Definition: fglmvec.cc:219
fglmVector::gcd
number gcd() const
Definition: fglmvec.cc:459
nIsZero
#define nIsZero(n)
Definition: numbers.h:20
nMult
#define nMult(n1, n2)
Definition: numbers.h:18
gaussReducer::v
fglmVector v
Definition: fglmgauss.h:24
gaussReducer::p
fglmVector p
Definition: fglmgauss.h:25
gaussElem
Definition: fglmgauss.cc:25
fglmVector::getconstelem
number getconstelem(int i) const
Definition: fglmvec.cc:447
nDelete
#define nDelete(n)
Definition: numbers.h:17
n_SubringGcd
static FORCE_INLINE number n_SubringGcd(number a, number b, const coeffs r)
Definition: coeffs.h:688
gcd
int gcd(int a, int b)
Definition: walkSupport.cc:836
nInit
#define nInit(i)
Definition: numbers.h:25
nCopy
#define nCopy(n)
Definition: numbers.h:16
gaussReducer::pdenom
number pdenom
Definition: fglmgauss.h:26
fglmVector::elemIsZero
int elemIsZero(int i)
Definition: fglmvec.cc:301
fglmVector::size
int size() const
Definition: fglmvec.cc:208