50 #define MAXPOINTS 10000 51 #define MAXINITELEMS 256 52 #define LIFT_COOR 50000 // siRand() % LIFT_COOR gives random lift value 53 #define SCALEDOWN 100.0 // lift value scale down for linear program 55 #define RVMULT 0.0001 // multiplicator for random shift vector 56 #define MAXRVVAL 50000 83 number
getDetAt(
const number* evpoint );
85 poly
getUDet(
const number* evpoint );
148 typedef struct onePoint * onePointP;
158 typedef struct _entry * entry;
184 bool addPoint(
const onePointP vert );
215 void getRowMP(
const int indx,
int * vert );
237 inline bool smaller(
int,
int );
240 inline bool larger(
int,
int );
268 bool inHull(poly
p, poly pointPoly,
int m,
int site);
332 #if defined(mprDEBUG_PROT) || defined(mprDEBUG_ALL) 333 void print_mat(
mprfloat **a,
int maxrow,
int maxcol)
337 for (
i = 1;
i <= maxrow;
i++)
340 for (
j = 1;
j <= maxcol;
j++)
Print(
"% 7.2f, ", a[
i][
j]);
348 printf(
"Output matrix from LinProg");
352 if (
i == 1) printf(
" ");
353 else if (iposv[
i-1] <=
N) printf(
"X%d", iposv[
i-1]);
354 else printf(
"Y%d", iposv[
i-1]-
N+1);
355 for (
j = 1;
j <=
ncols;
j++) printf(
" %7.2f ",(
double)a[
i][
j]);
361 void print_exp(
const onePointP vert,
int n )
364 for (
i= 1;
i <= n;
i++ )
366 Print(
" %d",vert->point[
i] );
372 void print_matrix(
matrix omat )
419 for (
i= 0;
i <=
max;
i++ )
431 for (
i= 0;
i <=
max;
i++ )
452 (
max+1) *
sizeof(onePointP),
453 (2*
max + 1) *
sizeof(onePointP) );
518 for (
i= 1;
i <=
num;
i++ )
520 for (
j= 1;
j <=
dim;
j++ )
521 if (
points[
i]->point[
j] != vert->point[
j] )
break;
522 if (
j >
dim )
break;
537 for (
i= 1;
i <=
num;
i++ )
539 for (
j= 1;
j <=
dim;
j++ )
541 if (
j >
dim )
break;
557 vert= (
int *)
omAlloc( (
dim+1) *
sizeof(int) );
563 for (
i= 1;
i <=
num;
i++ )
565 for (
j= 1;
j <=
dim;
j++ )
567 if (
j >
dim )
break;
586 vert= (
int *)
omAlloc( (
dim+1) *
sizeof(int) );
589 for (
i= 1;
i <=
num;
i++ )
591 for (
j= 1;
j <=
dim;
j++ )
593 if (
j >
dim )
break;
597 if (
i >
num )
return 0;
607 for (
i= 1;
i <=
dim;
i++ )
608 vert[
i]= (
int)(
points[indx]->point[
i] -
points[indx]->rcPnt->point[
i]);
615 for (
i= 1;
i <=
dim;
i++ )
634 for (
i= 1;
i <=
dim;
i++ )
658 for (
i= 1;
i <
num;
i++ )
690 for (
j=1;
j <=
num;
j++ )
705 PrintS(
" lifted points: \n");
706 for (
j=1;
j <=
num;
j++ )
750 for(
i= 1;
i <=
n;
i++) {
753 for(
j= 1;
j <=
m;
j++ )
764 PrintS(
"Matrix of Linear Programming\n");
786 vert= (
int *)
omAlloc( (idelem+1) *
sizeof(int) );
789 for (
i= 0;
i < idelem;
i++ )
792 for(
i= 0;
i < idelem;
i++ )
798 for(
j= 1;
j <=
m;
j++) {
815 omFreeSize( (
void *) vert, (idelem+1) *
sizeof(
int) );
819 for(
i= 0;
i < idelem;
i++ )
846 vert= (
int *)
omAlloc( (idelem+1) *
sizeof(int) );
849 for(
i= 0;
i < idelem;
i++ )
854 for(
j= 1;
j <=
m;
j++) {
857 if ( (id->m)[
i] ==
NULL )
879 omFreeSize( (
void *) vert, (idelem+1) *
sizeof(
int) );
883 for(
i= 0;
i < idelem;
i++ )
913 int i, ii,
j,
k, col, r;
930 for(
i=0;
i <=
n;
i++ )
943 for (
i= 0;
i <=
n;
i++ )
949 for ( r= 0; r <=
n; r++ )
951 if ( r ==
i )
pLP->
LiPM[r+2][col] = -1.0;
952 else pLP->
LiPM[r+2][col] = 0.0;
954 for( r= 1; r <=
dim; r++ )
960 Werror(
"mayanPyramidAlg::vDistance:" 961 "setting up matrix for udist: col %d != cols %d",col,cols);
968 Print(
"vDistance LP, known koords dim=%d, constr %d, cols %d, acoords= ",
971 Print(
" %d",acoords_a[
i]);
979 PrintS(
"LP returns matrix\n");
985 WerrorS(
"mayanPyramidAlg::vDistance:");
987 WerrorS(
" Unbounded v-distance: probably 1st v-coor=0");
989 WerrorS(
" Infeasible v-distance");
1000 int i,
j,
k, cols, cons;
1010 for(
i=2;
i<=
n+2;
i++)
1018 for(
i=0;
i<=
n;
i++)
1025 for(
k=2;
k<=
n+2;
k++)
1027 if(
k != la_cons_row)
pLP->
LiPM[
k][cols] = 0.0;
1030 for(
k=1;
k<=
n;
k++)
1035 for(
i= 0;
i <
dim;
i++ )
1047 Print(
"\nThats the matrix for minR, dim= %d, acoords= ",
dim);
1048 for(
i= 0;
i <
dim;
i++ )
1051 print_mat(
pLP->
LiPM, cons+1, cols);
1064 WerrorS(
" mn_mx_MinkowskiSum: LinearProgram: minR: infeasible");
1066 WerrorS(
" mn_mx_MinkowskiSum: LinearProgram: minR: unbounded");
1076 for(
i=2;
i<=
n+2;
i++)
1083 for(
i=0;
i<=
n;
i++)
1090 for(
k=2;
k<=
n+2;
k++)
1092 if(
k != la_cons_row)
pLP->
LiPM[
k][cols] = 0.0;
1095 for(
k=1;
k<=
n;
k++)
1100 for(
i= 0;
i <
dim;
i++ )
1111 Print(
"\nThats the matrix for maxR, dim= %d\n",
dim);
1112 print_mat(
pLP->
LiPM, cons+1, cols);
1125 WerrorS(
" mn_mx_MinkowskiSum: LinearProgram: maxR: infeasible");
1127 WerrorS(
" mn_mx_MinkowskiSum: LinearProgram: maxR: unbounded");
1133 Print(
" Range for dim=%d: [%d,%d]\n",
dim, *minR, *maxR);
1175 Print(
":: [%d,%d]\n", minR, maxR);
1224 for (
i= 0;
i <= nn;
i++ )
1226 if ( (loffset < indx) && (indx <= pQ[
i]->
num + loffset) )
1232 else loffset+= pQ[
i]->
num;
1253 for (
i= 0;
i <=
n;
i++ )
1264 for (
j = 0;
j <=
n;
j++ )
1273 for (
j = 1;
j <=
n;
j++ )
1280 for (
j = 0;
j <=
n;
j++ )
LP->
LiPM[
j+2][1] = 1.0;
1291 Print(
" n= %d, LP->m=M= %d, LP->n=N= %d\n",
n,
LP->
m,
LP->
n);
1319 for (
i= 1;
i <
LP->
m;
i++ )
1340 PrintS(
" now split into sets\n");
1345 for (
i= 0;
i <=
E->dim;
i++ ) bucket[
i]= 0;
1349 for (
i= 0;
i <
LP->
m;
i++ )
1352 if (
LP->
LiPM[
i+2][1] > 1e-12 )
1356 Werror(
" resMatrixSparse::RC: Found bad solution in LP: %d!",
LP->
iposv[
i+1]);
1357 WerrorS(
" resMatrixSparse::RC: remapXiToPoint failed!");
1360 bucket[optSum[c].
set]++;
1368 for (
i= 1;
i <
E->dim;
i++ )
1370 if ( bucket[c] >= bucket[
i] )
1376 for (
i= onum - 1;
i >= 0;
i-- )
1378 if ( optSum[
i].
set == c )
1382 (*E)[vert]->rc.set= c;
1383 (*E)[vert]->rc.pnt= optSum[
i].
pnt;
1384 (*E)[vert]->rcPnt= (*pQ[c])[optSum[
i].
pnt];
1388 #ifdef mprDEBUG_PROT 1389 Print(
"\n Point E[%d] was <",vert);print_exp((*
E)[vert],
E->dim-1);
Print(
">, bucket={");
1390 for (
j= 0;
j <
E->dim;
j++ )
1394 PrintS(
" }\n optimal Sum: Qi ");
1395 for (
j= 0;
j <
LP->
m;
j++ )
1399 Print(
" -> i= %d, j = %d\n",(*
E)[vert]->rc.set,optSum[
i].
pnt);
1422 int *epp_mon, *eexp;
1424 epp_mon= (
int *)
omAlloc( (
n+2) *
sizeof(int) );
1442 for (
i= 1;
i <=
E->num;
i++ )
1444 E->getRowMP(
i, epp_mon );
1453 while ( iterp!=
NULL )
1455 epos=
E->getExpPos( iterp );
1460 Werror(
"resMatrixSparse::createMatrix: Found exponent not in E, id %d, set [%d, %d]!",
1461 i,(*
E)[
i]->rc.set,(*
E)[
i]->rc.pnt);
1479 (
rmat->m)[
i-1]= rowp;
1483 omFreeSize( (
void *) epp_mon, (
n+2) *
sizeof(
int) );
1496 PrintS(
" Sparse Matrix done\n");
1512 for (
j= 1;
j <
i-1;
j++ )
1533 for (
j= 1;
j <= Q1->
num;
j++ )
1535 for (
k= 1;
k <= Q2->
num;
k++ )
1537 for (
l= 1;
l <=
dim;
l++ )
1539 vert.
point[
l]= (*Q1)[
j]->point[
l] + (*Q2)[
k]->point[
l];
1560 for (
j= 1;
j < numq;
j++ )
1585 WerrorS(
"resMatrixSparse::resMatrixSparse: Too many variables!");
1608 shift[0]=0.005; shift[1]=0.003; shift[2]=0.008; shift[3]=0.005; shift[4]=0.002;
1609 shift[5]=0.1; shift[6]=0.3; shift[7]=0.2; shift[8]=0.4; shift[9]=0.2;
1613 #ifdef mprDEBUG_PROT 1614 PrintS(
" shift vector: ");
1631 #ifdef mprDEBUG_PROT 1635 PrintS(
"\n E = (Q_0 + ... + Q_n) \\cap \\N :\n");
1654 for (
i= 0;
i <=
n;
i++ ) Qi[
i]->
lift();
1670 E->removePoint(
pnt);
1676 #ifdef mprDEBUG_PROT 1677 PrintS(
" points which lie in a cell:\n");
1686 for (
i= 0;
i <=
n;
i++ ) Qi[
i]->unlift();
1690 #ifdef mprDEBUG_PROT 1691 Print(
" points with a[ij] (%d):\n",
E->num);
1694 Print(
"Punkt p \\in E[%d]: <",
pnt);print_exp( (*
E)[
pnt],
E->dim );
1695 Print(
">, RC(p) = (i:%d, j:%d), a[i,j] = <",(*
E)[
pnt]->rc.set,(*
E)[
pnt]->rc.pnt);
1697 print_exp( (*
E)[
pnt]->rcPnt,
E->dim );
PrintS(
">\n");
1704 WerrorS(
"could not handle a degenerate situation: no inner points found");
1711 WerrorS(
"resMatrixSparse::resMatrixSparse: Error in resMatrixSparse::createMatrix!");
1812 for ( cp= 2; cp <=
idelem; cp++ )
1814 if ( !
nIsZero(evpoint[cp-1]) )
1870 for ( cp= 2; cp <=
idelem; cp++ )
1872 if ( !
nIsZero(evpoint[cp-1]) )
1955 number
getDetAt(
const number* evpoint );
2192 poly mon =
pCopy( mm );
2213 if ( var == (
currRing->N)+1 )
return;
2214 poly newm =
pCopy( mm );
2251 ideal pDegDiv=
idInit( polyDegs->
rows(), 1 );
2252 for (
k= 0;
k < polyDegs->
rows();
k++ )
2278 for (
k= 0;
k < iVO->
rows();
k++)
2291 for (
i= 0;
i <
k;
i++ )
2316 for (
i= 0;
i < polyDegs->
rows();
i++ )
2319 for (
k= 0;
k < polyDegs->
rows();
k++ )
2320 if (
i !=
k ) sub*= (*polyDegs)[
k];
2333 Print(
"// %s, S(%d), db ",
2381 for (
k= 0;
k < polyDegs.
rows();
k++ )
2382 sumDeg+= polyDegs[
k];
2383 sumDeg-= polyDegs.
rows() - 1;
2654 #define MAXEVPOINT 1000000 // 0x7fffffff 2660 unsigned long over(
const unsigned long n ,
const unsigned long d )
2665 mpz_init(
m);mpz_set_ui(
m,1);
2666 mpz_init(md);mpz_set_ui(md,1);
2667 mpz_init(mn);mpz_set_ui(mn,1);
2676 mpz_clear(
m);mpz_clear(md);mpz_clear(mn);
2707 WerrorS(
"uResultant::uResultant: Unknown chosen resultant matrix type!");
2718 ideal newGls=
idCopy( igls );
2721 (
IDELEMS(igls) + 1) *
sizeof(poly) );
2732 newGls->m[
i]= newGls->m[
i-1];
2734 newGls->m[0]= linPoly;
2738 WerrorS(
"uResultant::extendIdeal: Unknown chosen resultant matrix type!");
2749 poly actlp, rootlp= newlp;
2781 long mdg=
over(
n-1, tdg );
2784 long l=(long)
pow( (
double)(tdg+1),
n );
2786 #ifdef mprDEBUG_PROT 2787 Print(
"// total deg of D: tdg %ld\n",tdg);
2788 Print(
"// maximum number of terms in D: mdg: %ld\n",mdg);
2789 Print(
"// maximum number of terms in polynom of deg tdg: l %ld\n",
l);
2794 presults= (number *)
omAlloc( mdg *
sizeof( number ) );
2795 for (
i=0;
i < mdg;
i++) presults[
i]=
nInit(0);
2797 number *pevpoint= (number *)
omAlloc(
n *
sizeof( number ) );
2798 number *pev= (number *)
omAlloc(
n *
sizeof( number ) );
2801 mprPROTnl(
"// initial evaluation point: ");
2804 for (
i=0;
i <
n;
i++)
2815 for (
i=0;
i < mdg;
i++ )
2817 for (
j=0;
j <
n;
j++)
2840 if ( subDetVal !=
NULL )
2843 for (
i= 0;
i <= mdg;
i++ )
2845 detdiv=
nDiv( ncpoly[
i], subDetVal );
2854 for (
i=0;
i < mdg;
i++ )
2863 for (
i=0;
i < mdg;
i++ )
2882 for (
i=0;
i <
l;
i++ )
2906 for (
j= 0;
j <
n - 1;
j++ )
2927 int loops= (matchUp?
n-2:
n-1);
2929 mprPROTnl(
"uResultant::interpolateDenseSP");
2937 presults= (number *)
omAlloc( (tdg + 1) *
sizeof( number ) );
2938 for (
i=0;
i <= tdg;
i++ ) presults[
i]=
nInit(0);
2944 number *pevpoint= (number *)
omAlloc(
n *
sizeof( number ) );
2947 number *pev= (number *)
omAlloc(
n *
sizeof( number ) );
2954 for ( uvar= 0; uvar < loops; uvar++ )
2959 for (
i=0;
i <
n;
i++)
2968 else if (
i <= uvar + 2 )
2980 for (
i=0;
i <
n;
i++)
2991 if (
i == (uvar + 1) ) pevpoint[
i]=
nInit(-1);
2992 else pevpoint[
i]=
nInit(0);
2999 for (
i=0;
i <
n;
i++)
3005 for (
i=0;
i <= tdg;
i++ )
3008 nPower(pevpoint[0],
i,&pev[0]);
3024 if ( subDetVal !=
NULL )
3027 for (
i= 0;
i <= tdg;
i++ )
3029 detdiv=
nDiv( ncpoly[
i], subDetVal );
3038 for (
i=0;
i <= tdg;
i++ )
3056 omFreeSize( (
void *)presults, (tdg + 1) *
sizeof( number ) );
3066 int loops=(matchUp?
n-2:
n-1);
3068 if (loops==0) { loops=1;nn++;}
3078 number *pevpoint= (number *)
omAlloc( nn *
sizeof( number ) );
3079 for (
i=0;
i < nn;
i++) pevpoint[
i]=
nInit(0);
3084 for ( uvar= 0; uvar < loops; uvar++ )
3089 for (
i=0;
i <
n;
i++)
3093 if (
i <= uvar + 2 )
3098 else pevpoint[
i]=
nInit(0);
3104 for (
i=0;
i <
n;
i++)
3108 if (
i == (uvar + 1) ) pevpoint[
i]=
nInit(-1);
3109 else pevpoint[
i]=
nInit(0);
3116 number *ncpoly= (number *)
omAlloc( (tdg+1) *
sizeof(number) );
3123 for (
i= tdg;
i >= 0;
i-- )
3145 if ( subDetVal !=
NULL )
3148 for (
i= 0;
i <= tdg;
i++ )
3150 detdiv=
nDiv( ncpoly[
i], subDetVal );
3169 omFreeSize( (
void *)pevpoint,
n *
sizeof( number ) );
3196 int totverts,idelem;
3203 for(
i=0;
i < idelem;
i++) totverts +=
pLength( (id->m)[
i] );
3205 LP =
new simplex( idelem+totverts*2+5, totverts+5 );
int status int void size_t count
#define pSetmComp(p)
TODO:
#define mprSTICKYPROT(msg)
complex root finder for univariate polynomials based on laguers algorithm
pointSet(const int _dim, const int _index=0, const int count=MAXINITELEMS)
int RC(pointSet **pQ, pointSet *E, int vert, mprfloat shift[])
Row Content Function Finds the largest i such that F[i] is a point, F[i]= a[ij] in A[i] for some j.
long isReduced(const nmod_mat_t M)
void randomVector(const int dim, mprfloat shift[])
number * interpolateDense(const number *q)
Solves the Vandermode linear system \sum_{i=1}^{n} x_i^k-1 w_i = q_k, k=1,..,n.
vandermonde system solver for interpolating polynomials from their values
CanonicalForm cd(bCommonDen(FF))
#define idDelete(H)
delete an ideal
gmp_float exp(const gmp_float &a)
Linear Programming / Linear Optimization using Simplex - Algorithm.
Compatiblity layer for legacy polynomial operations (over currRing)
#define nPower(a, b, res)
#define mprPROTL(msg, intval)
poly sm_CallDet(ideal I, const ring R)
bool larger(int, int)
points[a] > points[b] ?
#define mprSTICKYPROT2(msg, arg)
static void p_GetExpV(poly p, int *ev, const ring r)
#define omFreeSize(addr, size)
bool checkMem()
Checks, if more mem is needed ( i.e.
#define omfreeSize(addr, size)
poly linearPoly(const resMatType rmt)
virtual poly getUDet(const number *)
void getRowMP(const int indx, int *vert)
void mn_mx_MinkowskiSum(int dim, Coord_t *minR, Coord_t *maxR)
LP for finding min/max coord in MinkowskiSum, given previous coors.
Coord_t acoords[MAXVARS+2]
poly singclap_det(const matrix m, const ring s)
mprfloat vDistance(Coord_t *acoords, int dim)
Compute v-distance via Linear Programing Linear Program finds the v-distance of the point in accords[...
void WerrorS(const char *s)
ideal loNewtonPolytope(const ideal id)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
Base class for sparse and dense u-Resultant computation.
rootContainer ** specializeInU(BOOLEAN matchUp=false, const number subDetVal=NULL)
resMatrixDense(const ideal _gls, const int special=SNONE)
_gls: system of multivariate polynoms special: -1 -> resMatrixDense is a symbolic matrix 0,...
resVector * resVectorList
virtual number getDetAt(const number *)
#define nPrint(a)
only for debug, over any initalized currRing
static FORCE_INLINE number n_Param(const int iParameter, const coeffs r)
return the (iParameter^th) parameter as a NEW number NOTE: parameter numbering: 1....
poly getElem(const int i)
index von 0 ...
ideal lift(const ideal J, const ring r, const ideal inI, const ring s)
int getExpPos(const poly p)
#define omReallocSize(addr, o_size, size)
#define pGetExp(p, i)
Exponent.
number * numColVector
holds the column vector if (elementOfS != linPolyS)
poly monomAt(poly p, int i)
number getElemNum(const int i)
index von 0 ...
ideal newtonPolytopesI(const ideal gls)
static FORCE_INLINE long n_Int(number &n, const coeffs r)
conversion of n to an int; 0 if not possible in Z/pZ: the representing int lying in (-p/2 ....
const CanonicalForm CFMap CFMap & N
static int max(int a, int b)
pointSet * getInnerPoints(pointSet **_q_i, mprfloat _shift[])
Drive Mayan Pyramid Algorithm.
#define pLmDivisibleByNoComp(a, b)
like pLmDivisibleBy, does not check components
static long pTotaldegree(poly p)
for(int i=0;i<=n;i++) degsf[i]
#define pLmInit(p)
like pInit, except that expvector is initialized to that of p, p must be != NULL
void lift(int *l=NULL)
Lifts the point set using sufficiently generic linear lifting homogeneous forms l[1]....
void mergeWithPoly(const poly p)
convexHull(simplex *_pLP)
void fillContainer(number *_coeffs, number *_ievpoint, const int _var, const int _tdg, const rootType _rt, const int _anz)
int nextPrime(const int p)
poly getUDet(const number *evpoint)
void PrintS(const char *s)
mayanPyramidAlg(simplex *_pLP)
int elementOfS
number of the set S mon is element of
static unsigned pLength(poly a)
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL
rootContainer ** interpolateDenseSP(BOOLEAN matchUp=false, const number subDetVal=NULL)
pointSet * minkSumTwo(pointSet *Q1, pointSet *Q2, int dim)
static int index(p_Length length, p_Ord ord)
int numColVectorSize
size of numColVector
matrix mpNew(int r, int c)
create a r x c zero-matrix
ideal idInit(int idsize, int rank)
initialise an ideal / module
onePointP operator[](const int index)
REvaluation E(1, terms.length(), IntRandom(25))
bool addPoint(const onePointP vert)
Adds a point to pointSet, copy vert[0,...,dim] ot point[num+1][0,...,dim].
bool removePoint(const int indx)
resMatrixSparse(const ideal _gls, const int special=SNONE)
void generateBaseData()
Generate the "matrix" M.
pointSet * minkSumAll(pointSet **pQ, int numq, int dim)
ideal getSubMatrix()
Returns the submatrix M' of M in an usable presentation.
bool smaller(int, int)
points[a] < points[b] ?
void createMatrix()
Creates quadratic matrix M of size numVectors for later use.
bool remapXiToPoint(const int indx, pointSet **pQ, int *set, int *vtx)
#define pInit()
allocates a new monomial and initializes everything to 0
poly interpolateDense(const number subDetVal=NULL)
number getSubDet()
Evaluates the determinant of the submatrix M'.
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
bool mergeWithExp(const onePointP vert)
Adds point to pointSet, iff pointSet \cap point = \emptyset.
#define mprPROTN(msg, nval)
number getDetAt(const number *evpoint)
Fills in resMat[][] with evpoint[] and gets determinant uRPos[i][1]: row of matrix uRPos[i][idelem+1]...
ideal getMatrix()
Returns the matrix M in an usable presentation.
pointSet ** newtonPolytopesP(const ideal gls)
Computes the point sets of the convex hulls of the supports given by the polynoms in gls.
void generateMonomData(int deg, intvec *polyDegs, intvec *iVO)
Generates needed set of monoms, split them into sets S0, ...
int * numColParNr
holds the index of u0, u1, ..., un, if (elementOfS == linPolyS) the size is given by (currRing->N)
int createMatrix(pointSet *E)
create coeff matrix uRPos[i][1]: row of matrix uRPos[i][idelem+1]: col of u(0) uRPos[i][2....
uResultant(const ideal _gls, const resMatType _rmt=sparseResMat, BOOLEAN extIdeal=true)
Rational pow(const Rational &a, int e)
#define IMATELEM(M, I, J)
#define pSetCoeff(p, n)
deletes old coeff before setting the new one
unsigned long over(const unsigned long n, const unsigned long d)
ideal id_Matrix2Module(matrix mat, const ring R)
converts mat to module, destroys mat
resVector * getMVector(const int i)
column vector of matrix, index von 0 ...
void Werror(const char *fmt,...)
#define mprPROTNnl(msg, nval)
ideal extendIdeal(const ideal gls, poly linPoly, const resMatType rmt)
void generateMonoms(poly m, int var, int deg)
Recursively generate all homogeneous monoms of (currRing->N) variables of degree deg.
bool inHull(poly p, poly pointPoly, int m, int site)
Returns true iff the support of poly pointPoly is inside the convex hull of all points given by the s...
number getDetAt(const number *evpoint)
Evaluate the determinant of the matrix M at the point evpoint where the ui's are replaced by the comp...
void runMayanPyramid(int dim)
Recursive Mayan Pyramid algorithm for directly computing MinkowskiSum lattice points for (n+1)-fold M...
bool storeMinkowskiSumPoint()
Stores point in E->points[pt], iff v-distance != 0 Returns true iff point was stored,...
#define pCopy(p)
return a copy of the poly
#define MATELEM(mat, i, j)