 |
My Project
debian-1:4.1.1-p2+ds-4build1
|
Go to the documentation of this file.
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 );
void lift(int *l=NULL)
Lifts the point set using sufficiently generic linear lifting homogeneous forms l[1]....
resMatrixSparse(const ideal _gls, const int special=SNONE)
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.
#define mprPROTNnl(msg, nval)
resVector * getMVector(const int i)
column vector of matrix, index von 0 ...
ideal newtonPolytopesI(const ideal gls)
ideal id_Matrix2Module(matrix mat, const ring R)
converts mat to module, destroys mat
#define idDelete(H)
delete an ideal
#define nPower(a, b, res)
int createMatrix(pointSet *E)
create coeff matrix uRPos[i][1]: row of matrix uRPos[i][idelem+1]: col of u(0) uRPos[i][2....
#define MATELEM(mat, i, j)
number getDetAt(const number *evpoint)
Fills in resMat[][] with evpoint[] and gets determinant uRPos[i][1]: row of matrix uRPos[i][idelem+1]...
ideal getSubMatrix()
Returns the submatrix M' of M in an usable presentation.
long isReduced(const nmod_mat_t M)
poly interpolateDense(const number subDetVal=NULL)
#define pGetExp(p, i)
Exponent.
ideal lift(const ideal J, const ring r, const ideal inI, const ring s)
virtual number getDetAt(const number *)
poly singclap_det(const matrix m, const ring s)
#define mprPROTN(msg, nval)
rootContainer ** interpolateDenseSP(BOOLEAN matchUp=false, const number subDetVal=NULL)
ideal loNewtonPolytope(const ideal id)
void runMayanPyramid(int dim)
Recursive Mayan Pyramid algorithm for directly computing MinkowskiSum lattice points for (n+1)-fold M...
vandermonde system solver for interpolating polynomials from their values
pointSet * minkSumAll(pointSet **pQ, int numq, int dim)
#define mprPROTL(msg, intval)
REvaluation E(1, terms.length(), IntRandom(25))
void generateBaseData()
Generate the "matrix" M.
const CanonicalForm CFMap CFMap & N
number * numColVector
holds the column vector if (elementOfS != linPolyS)
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....
ideal extendIdeal(const ideal gls, poly linPoly, const resMatType rmt)
#define mprSTICKYPROT(msg)
static long pTotaldegree(poly p)
poly getElem(const int i)
index von 0 ...
void randomVector(const int dim, mprfloat shift[])
void generateMonomData(int deg, intvec *polyDegs, intvec *iVO)
Generates needed set of monoms, split them into sets S0, ...
#define mprSTICKYPROT2(msg, arg)
resMatrixDense(const ideal _gls, const int special=SNONE)
_gls: system of multivariate polynoms special: -1 -> resMatrixDense is a symbolic matrix 0,...
bool removePoint(const int indx)
static unsigned pLength(poly a)
pointSet ** newtonPolytopesP(const ideal gls)
Computes the point sets of the convex hulls of the supports given by the polynoms in gls.
bool checkMem()
Checks, if more mem is needed ( i.e.
for(int i=0;i<=n;i++) degsf[i]
bool smaller(int, int)
points[a] < points[b] ?
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
number getElemNum(const int i)
index von 0 ...
poly getUDet(const number *evpoint)
bool larger(int, int)
points[a] > points[b] ?
CanonicalForm cd(bCommonDen(FF))
poly monomAt(poly p, int i)
void PrintS(const char *s)
#define omFreeSize(addr, size)
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...
#define omfreeSize(addr, size)
#define nPrint(a)
only for debug, over any initalized currRing
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...
onePointP operator[](const int index)
uResultant(const ideal _gls, const resMatType _rmt=sparseResMat, BOOLEAN extIdeal=true)
mprfloat vDistance(Coord_t *acoords, int dim)
Compute v-distance via Linear Programing Linear Program finds the v-distance of the point in accords[...
bool addPoint(const onePointP vert)
Adds a point to pointSet, copy vert[0,...,dim] ot point[num+1][0,...,dim].
void mn_mx_MinkowskiSum(int dim, Coord_t *minR, Coord_t *maxR)
LP for finding min/max coord in MinkowskiSum, given previous coors.
pointSet(const int _dim, const int _index=0, const int count=MAXINITELEMS)
static int max(int a, int b)
Coord_t acoords[MAXVARS+2]
#define pInit()
allocates a new monomial and initializes everything to 0
int getExpPos(const poly p)
static void p_GetExpV(poly p, int *ev, const ring r)
#define pLmDivisibleByNoComp(a, b)
like pLmDivisibleBy, does not check components
matrix mpNew(int r, int c)
create a r x c zero-matrix
void fillContainer(number *_coeffs, number *_ievpoint, const int _var, const int _tdg, const rootType _rt, const int _anz)
#define pLmInit(p)
like pInit, except that expvector is initialized to that of p, p must be != NULL
Linear Programming / Linear Optimization using Simplex - Algorithm.
#define pSetCoeff(p, n)
deletes old coeff before setting the new one
gmp_float exp(const gmp_float &a)
int elementOfS
number of the set S mon is element of
#define IMATELEM(M, I, J)
bool mergeWithExp(const onePointP vert)
Adds point to pointSet, iff pointSet \cap point = \emptyset.
bool remapXiToPoint(const int indx, pointSet **pQ, int *set, int *vtx)
unsigned long over(const unsigned long n, const unsigned long d)
#define pSetmComp(p)
TODO:
int numColVectorSize
size of numColVector
void mergeWithPoly(const poly p)
void Werror(const char *fmt,...)
ideal idInit(int idsize, int rank)
initialise an ideal / module
Rational pow(const Rational &a, int e)
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.
void WerrorS(const char *s)
void generateMonoms(poly m, int var, int deg)
Recursively generate all homogeneous monoms of (currRing->N) variables of degree deg.
poly linearPoly(const resMatType rmt)
virtual poly getUDet(const number *)
poly sm_CallDet(ideal I, const ring R)
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 ....
void createMatrix()
Creates quadratic matrix M of size numVectors for later use.
number getSubDet()
Evaluates the determinant of the submatrix M'.
int status int void size_t count
ideal getMatrix()
Returns the matrix M in an usable presentation.
pointSet * getInnerPoints(pointSet **_q_i, mprfloat _shift[])
Drive Mayan Pyramid Algorithm.
#define pCopy(p)
return a copy of the poly
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL
complex root finder for univariate polynomials based on laguers algorithm
resVector * resVectorList
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
pointSet * minkSumTwo(pointSet *Q1, pointSet *Q2, int dim)
static int index(p_Length length, p_Ord ord)
bool storeMinkowskiSumPoint()
Stores point in E->points[pt], iff v-distance != 0 Returns true iff point was stored,...
int nextPrime(const int p)
convexHull(simplex *_pLP)
void getRowMP(const int indx, int *vert)
rootContainer ** specializeInU(BOOLEAN matchUp=false, const number subDetVal=NULL)
int * numColParNr
holds the index of u0, u1, ..., un, if (elementOfS == linPolyS) the size is given by (currRing->N)
Base class for sparse and dense u-Resultant computation.
mayanPyramidAlg(simplex *_pLP)
#define omReallocSize(addr, o_size, size)