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