 |
My Project
debian-1:4.1.2-p1+ds-2
|
Go to the documentation of this file.
48 #define MAXPOINTS 10000
49 #define MAXINITELEMS 256
50 #define LIFT_COOR 50000 // siRand() % LIFT_COOR gives random lift value
51 #define SCALEDOWN 100.0 // lift value scale down for linear program
53 #define RVMULT 0.0001 // multiplicator for random shift vector
54 #define MAXRVVAL 50000
81 number
getDetAt(
const number* evpoint );
83 poly
getUDet(
const number* evpoint );
146 typedef struct onePoint * onePointP;
156 typedef struct _entry * entry;
182 bool addPoint(
const onePointP vert );
213 void getRowMP(
const int indx,
int * vert );
235 inline bool smaller(
int,
int );
238 inline bool larger(
int,
int );
266 bool inHull(poly
p, poly pointPoly,
int m,
int site);
330 #if defined(mprDEBUG_PROT) || defined(mprDEBUG_ALL)
331 void print_mat(
mprfloat **a,
int maxrow,
int maxcol)
335 for (
i = 1;
i <= maxrow;
i++)
338 for (
j = 1;
j <= maxcol;
j++)
Print(
"% 7.2f, ", a[
i][
j]);
346 printf(
"Output matrix from LinProg");
350 if (
i == 1) printf(
" ");
351 else if (iposv[
i-1] <=
N) printf(
"X%d", iposv[
i-1]);
352 else printf(
"Y%d", iposv[
i-1]-
N+1);
353 for (
j = 1;
j <=
ncols;
j++) printf(
" %7.2f ",(
double)a[
i][
j]);
359 void print_exp(
const onePointP vert,
int n )
362 for (
i= 1;
i <= n;
i++ )
364 Print(
" %d",vert->point[
i] );
370 void print_matrix(
matrix omat )
417 for (
i= 0;
i <=
max;
i++ )
429 for (
i= 0;
i <=
max;
i++ )
450 (
max+1) *
sizeof(onePointP),
451 (2*
max + 1) *
sizeof(onePointP) );
516 for (
i= 1;
i <=
num;
i++ )
518 for (
j= 1;
j <=
dim;
j++ )
519 if (
points[
i]->point[
j] != vert->point[
j] )
break;
520 if (
j >
dim )
break;
535 for (
i= 1;
i <=
num;
i++ )
537 for (
j= 1;
j <=
dim;
j++ )
539 if (
j >
dim )
break;
555 vert= (
int *)
omAlloc( (
dim+1) *
sizeof(int) );
561 for (
i= 1;
i <=
num;
i++ )
563 for (
j= 1;
j <=
dim;
j++ )
565 if (
j >
dim )
break;
584 vert= (
int *)
omAlloc( (
dim+1) *
sizeof(int) );
587 for (
i= 1;
i <=
num;
i++ )
589 for (
j= 1;
j <=
dim;
j++ )
591 if (
j >
dim )
break;
595 if (
i >
num )
return 0;
605 for (
i= 1;
i <=
dim;
i++ )
606 vert[
i]= (
int)(
points[indx]->point[
i] -
points[indx]->rcPnt->point[
i]);
613 for (
i= 1;
i <=
dim;
i++ )
632 for (
i= 1;
i <=
dim;
i++ )
656 for (
i= 1;
i <
num;
i++ )
688 for (
j=1;
j <=
num;
j++ )
703 PrintS(
" lifted points: \n");
704 for (
j=1;
j <=
num;
j++ )
748 for(
i= 1;
i <=
n;
i++) {
751 for(
j= 1;
j <=
m;
j++ )
762 PrintS(
"Matrix of Linear Programming\n");
784 vert= (
int *)
omAlloc( (idelem+1) *
sizeof(int) );
787 for (
i= 0;
i < idelem;
i++ )
790 for(
i= 0;
i < idelem;
i++ )
796 for(
j= 1;
j <=
m;
j++) {
813 omFreeSize( (
void *) vert, (idelem+1) *
sizeof(
int) );
817 for(
i= 0;
i < idelem;
i++ )
844 vert= (
int *)
omAlloc( (idelem+1) *
sizeof(int) );
847 for(
i= 0;
i < idelem;
i++ )
852 for(
j= 1;
j <=
m;
j++) {
855 if ( (id->m)[
i] ==
NULL )
877 omFreeSize( (
void *) vert, (idelem+1) *
sizeof(
int) );
881 for(
i= 0;
i < idelem;
i++ )
911 int i, ii,
j,
k, col, r;
928 for(
i=0;
i <=
n;
i++ )
941 for (
i= 0;
i <=
n;
i++ )
947 for ( r= 0; r <=
n; r++ )
949 if ( r ==
i )
pLP->
LiPM[r+2][col] = -1.0;
950 else pLP->
LiPM[r+2][col] = 0.0;
952 for( r= 1; r <=
dim; r++ )
958 Werror(
"mayanPyramidAlg::vDistance:"
959 "setting up matrix for udist: col %d != cols %d",col,cols);
966 Print(
"vDistance LP, known koords dim=%d, constr %d, cols %d, acoords= ",
969 Print(
" %d",acoords_a[
i]);
977 PrintS(
"LP returns matrix\n");
983 WerrorS(
"mayanPyramidAlg::vDistance:");
985 WerrorS(
" Unbounded v-distance: probably 1st v-coor=0");
987 WerrorS(
" Infeasible v-distance");
998 int i,
j,
k, cols, cons;
1008 for(
i=2;
i<=
n+2;
i++)
1016 for(
i=0;
i<=
n;
i++)
1023 for(
k=2;
k<=
n+2;
k++)
1025 if(
k != la_cons_row)
pLP->
LiPM[
k][cols] = 0.0;
1028 for(
k=1;
k<=
n;
k++)
1033 for(
i= 0;
i <
dim;
i++ )
1045 Print(
"\nThats the matrix for minR, dim= %d, acoords= ",
dim);
1046 for(
i= 0;
i <
dim;
i++ )
1049 print_mat(
pLP->
LiPM, cons+1, cols);
1062 WerrorS(
" mn_mx_MinkowskiSum: LinearProgram: minR: infeasible");
1064 WerrorS(
" mn_mx_MinkowskiSum: LinearProgram: minR: unbounded");
1074 for(
i=2;
i<=
n+2;
i++)
1081 for(
i=0;
i<=
n;
i++)
1088 for(
k=2;
k<=
n+2;
k++)
1090 if(
k != la_cons_row)
pLP->
LiPM[
k][cols] = 0.0;
1093 for(
k=1;
k<=
n;
k++)
1098 for(
i= 0;
i <
dim;
i++ )
1109 Print(
"\nThats the matrix for maxR, dim= %d\n",
dim);
1110 print_mat(
pLP->
LiPM, cons+1, cols);
1123 WerrorS(
" mn_mx_MinkowskiSum: LinearProgram: maxR: infeasible");
1125 WerrorS(
" mn_mx_MinkowskiSum: LinearProgram: maxR: unbounded");
1131 Print(
" Range for dim=%d: [%d,%d]\n",
dim, *minR, *maxR);
1173 Print(
":: [%d,%d]\n", minR, maxR);
1222 for (
i= 0;
i <= nn;
i++ )
1224 if ( (loffset < indx) && (indx <= pQ[
i]->
num + loffset) )
1230 else loffset+= pQ[
i]->
num;
1251 for (
i= 0;
i <=
n;
i++ )
1262 for (
j = 0;
j <=
n;
j++ )
1271 for (
j = 1;
j <=
n;
j++ )
1278 for (
j = 0;
j <=
n;
j++ )
LP->
LiPM[
j+2][1] = 1.0;
1289 Print(
" n= %d, LP->m=M= %d, LP->n=N= %d\n",
n,
LP->
m,
LP->
n);
1317 for (
i= 1;
i <
LP->
m;
i++ )
1338 PrintS(
" now split into sets\n");
1343 for (
i= 0;
i <=
E->dim;
i++ ) bucket[
i]= 0;
1347 for (
i= 0;
i <
LP->
m;
i++ )
1350 if (
LP->
LiPM[
i+2][1] > 1e-12 )
1354 Werror(
" resMatrixSparse::RC: Found bad solution in LP: %d!",
LP->
iposv[
i+1]);
1355 WerrorS(
" resMatrixSparse::RC: remapXiToPoint failed!");
1358 bucket[optSum[c].
set]++;
1366 for (
i= 1;
i <
E->dim;
i++ )
1368 if ( bucket[c] >= bucket[
i] )
1374 for (
i= onum - 1;
i >= 0;
i-- )
1376 if ( optSum[
i].
set == c )
1380 (*E)[vert]->rc.set= c;
1381 (*E)[vert]->rc.pnt= optSum[
i].
pnt;
1382 (*E)[vert]->rcPnt= (*pQ[c])[optSum[
i].
pnt];
1386 #ifdef mprDEBUG_PROT
1387 Print(
"\n Point E[%d] was <",vert);print_exp((*
E)[vert],
E->dim-1);
Print(
">, bucket={");
1388 for (
j= 0;
j <
E->dim;
j++ )
1392 PrintS(
" }\n optimal Sum: Qi ");
1393 for (
j= 0;
j <
LP->
m;
j++ )
1397 Print(
" -> i= %d, j = %d\n",(*
E)[vert]->rc.set,optSum[
i].
pnt);
1420 int *epp_mon, *eexp;
1422 epp_mon= (
int *)
omAlloc( (
n+2) *
sizeof(int) );
1440 for (
i= 1;
i <=
E->num;
i++ )
1442 E->getRowMP(
i, epp_mon );
1451 while ( iterp!=
NULL )
1453 epos=
E->getExpPos( iterp );
1458 Werror(
"resMatrixSparse::createMatrix: Found exponent not in E, id %d, set [%d, %d]!",
1459 i,(*
E)[
i]->rc.set,(*
E)[
i]->rc.pnt);
1477 (
rmat->m)[
i-1]= rowp;
1481 omFreeSize( (
void *) epp_mon, (
n+2) *
sizeof(
int) );
1494 PrintS(
" Sparse Matrix done\n");
1510 for (
j= 1;
j <
i-1;
j++ )
1531 for (
j= 1;
j <= Q1->
num;
j++ )
1533 for (
k= 1;
k <= Q2->
num;
k++ )
1535 for (
l= 1;
l <=
dim;
l++ )
1537 vert.
point[
l]= (*Q1)[
j]->point[
l] + (*Q2)[
k]->point[
l];
1558 for (
j= 1;
j < numq;
j++ )
1583 WerrorS(
"resMatrixSparse::resMatrixSparse: Too many variables!");
1606 shift[0]=0.005; shift[1]=0.003; shift[2]=0.008; shift[3]=0.005; shift[4]=0.002;
1607 shift[5]=0.1; shift[6]=0.3; shift[7]=0.2; shift[8]=0.4; shift[9]=0.2;
1611 #ifdef mprDEBUG_PROT
1612 PrintS(
" shift vector: ");
1629 #ifdef mprDEBUG_PROT
1633 PrintS(
"\n E = (Q_0 + ... + Q_n) \\cap \\N :\n");
1652 for (
i= 0;
i <=
n;
i++ ) Qi[
i]->
lift();
1668 E->removePoint(
pnt);
1674 #ifdef mprDEBUG_PROT
1675 PrintS(
" points which lie in a cell:\n");
1684 for (
i= 0;
i <=
n;
i++ ) Qi[
i]->unlift();
1688 #ifdef mprDEBUG_PROT
1689 Print(
" points with a[ij] (%d):\n",
E->num);
1692 Print(
"Punkt p \\in E[%d]: <",
pnt);print_exp( (*
E)[
pnt],
E->dim );
1693 Print(
">, RC(p) = (i:%d, j:%d), a[i,j] = <",(*
E)[
pnt]->rc.set,(*
E)[
pnt]->rc.pnt);
1695 print_exp( (*
E)[
pnt]->rcPnt,
E->dim );
PrintS(
">\n");
1702 WerrorS(
"could not handle a degenerate situation: no inner points found");
1709 WerrorS(
"resMatrixSparse::resMatrixSparse: Error in resMatrixSparse::createMatrix!");
1810 for ( cp= 2; cp <=
idelem; cp++ )
1812 if ( !
nIsZero(evpoint[cp-1]) )
1868 for ( cp= 2; cp <=
idelem; cp++ )
1870 if ( !
nIsZero(evpoint[cp-1]) )
1953 number
getDetAt(
const number* evpoint );
2190 poly mon =
pCopy( mm );
2211 if ( var == (
currRing->N)+1 )
return;
2212 poly newm =
pCopy( mm );
2249 ideal pDegDiv=
idInit( polyDegs->
rows(), 1 );
2250 for (
k= 0;
k < polyDegs->
rows();
k++ )
2276 for (
k= 0;
k < iVO->
rows();
k++)
2289 for (
i= 0;
i <
k;
i++ )
2314 for (
i= 0;
i < polyDegs->
rows();
i++ )
2317 for (
k= 0;
k < polyDegs->
rows();
k++ )
2318 if (
i !=
k ) sub*= (*polyDegs)[
k];
2331 Print(
"// %s, S(%d), db ",
2379 for (
k= 0;
k < polyDegs.
rows();
k++ )
2380 sumDeg+= polyDegs[
k];
2381 sumDeg-= polyDegs.
rows() - 1;
2652 #define MAXEVPOINT 1000000 // 0x7fffffff
2658 unsigned long over(
const unsigned long n ,
const unsigned long d )
2663 mpz_init(
m);mpz_set_ui(
m,1);
2664 mpz_init(md);mpz_set_ui(md,1);
2665 mpz_init(mn);mpz_set_ui(mn,1);
2674 mpz_clear(
m);mpz_clear(md);mpz_clear(mn);
2705 WerrorS(
"uResultant::uResultant: Unknown chosen resultant matrix type!");
2716 ideal newGls=
idCopy( igls );
2719 (
IDELEMS(igls) + 1) *
sizeof(poly) );
2730 newGls->m[
i]= newGls->m[
i-1];
2732 newGls->m[0]= linPoly;
2736 WerrorS(
"uResultant::extendIdeal: Unknown chosen resultant matrix type!");
2747 poly actlp, rootlp= newlp;
2779 long mdg=
over(
n-1, tdg );
2782 long l=(long)
pow( (
double)(tdg+1),
n );
2784 #ifdef mprDEBUG_PROT
2785 Print(
"// total deg of D: tdg %ld\n",tdg);
2786 Print(
"// maximum number of terms in D: mdg: %ld\n",mdg);
2787 Print(
"// maximum number of terms in polynom of deg tdg: l %ld\n",
l);
2792 presults= (number *)
omAlloc( mdg *
sizeof( number ) );
2793 for (
i=0;
i < mdg;
i++) presults[
i]=
nInit(0);
2795 number *pevpoint= (number *)
omAlloc(
n *
sizeof( number ) );
2796 number *pev= (number *)
omAlloc(
n *
sizeof( number ) );
2799 mprPROTnl(
"// initial evaluation point: ");
2802 for (
i=0;
i <
n;
i++)
2813 for (
i=0;
i < mdg;
i++ )
2815 for (
j=0;
j <
n;
j++)
2838 if ( subDetVal !=
NULL )
2841 for (
i= 0;
i <= mdg;
i++ )
2843 detdiv=
nDiv( ncpoly[
i], subDetVal );
2852 for (
i=0;
i < mdg;
i++ )
2861 for (
i=0;
i < mdg;
i++ )
2880 for (
i=0;
i <
l;
i++ )
2904 for (
j= 0;
j <
n - 1;
j++ )
2925 int loops= (matchUp?
n-2:
n-1);
2927 mprPROTnl(
"uResultant::interpolateDenseSP");
2935 presults= (number *)
omAlloc( (tdg + 1) *
sizeof( number ) );
2936 for (
i=0;
i <= tdg;
i++ ) presults[
i]=
nInit(0);
2942 number *pevpoint= (number *)
omAlloc(
n *
sizeof( number ) );
2945 number *pev= (number *)
omAlloc(
n *
sizeof( number ) );
2952 for ( uvar= 0; uvar < loops; uvar++ )
2957 for (
i=0;
i <
n;
i++)
2966 else if (
i <= uvar + 2 )
2978 for (
i=0;
i <
n;
i++)
2989 if (
i == (uvar + 1) ) pevpoint[
i]=
nInit(-1);
2990 else pevpoint[
i]=
nInit(0);
2997 for (
i=0;
i <
n;
i++)
3003 for (
i=0;
i <= tdg;
i++ )
3006 nPower(pevpoint[0],
i,&pev[0]);
3022 if ( subDetVal !=
NULL )
3025 for (
i= 0;
i <= tdg;
i++ )
3027 detdiv=
nDiv( ncpoly[
i], subDetVal );
3036 for (
i=0;
i <= tdg;
i++ )
3054 omFreeSize( (
void *)presults, (tdg + 1) *
sizeof( number ) );
3064 int loops=(matchUp?
n-2:
n-1);
3066 if (loops==0) { loops=1;nn++;}
3076 number *pevpoint= (number *)
omAlloc( nn *
sizeof( number ) );
3077 for (
i=0;
i < nn;
i++) pevpoint[
i]=
nInit(0);
3082 for ( uvar= 0; uvar < loops; uvar++ )
3087 for (
i=0;
i <
n;
i++)
3091 if (
i <= uvar + 2 )
3096 else pevpoint[
i]=
nInit(0);
3102 for (
i=0;
i <
n;
i++)
3106 if (
i == (uvar + 1) ) pevpoint[
i]=
nInit(-1);
3107 else pevpoint[
i]=
nInit(0);
3114 number *ncpoly= (number *)
omAlloc( (tdg+1) *
sizeof(number) );
3121 for (
i= tdg;
i >= 0;
i-- )
3143 if ( subDetVal !=
NULL )
3146 for (
i= 0;
i <= tdg;
i++ )
3148 detdiv=
nDiv( ncpoly[
i], subDetVal );
3167 omFreeSize( (
void *)pevpoint,
n *
sizeof( number ) );
3194 int totverts,idelem;
3201 for(
i=0;
i < idelem;
i++) totverts +=
pLength( (id->m)[
i] );
3203 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)
1-based access to matrix
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] ?
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.
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
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)