20 extern "C" double (*
wFunctional)(
int *degw,
int *lpol,
int npol,
21 double *rel,
double wx,
double wNsqr);
23 double *rel,
double wx,
double wNsqr);
25 double *rel,
double wx,
double wNsqr);
26 extern "C" void wAdd(
int *
A,
int mons,
int kn,
int xx,
int rvar);
27 extern "C" void wNorm(
int *degw,
int *lpol,
int npol,
double *rel);
29 int *lpol,
int npol,
double *rel,
double *fopt,
double wNsqr,
int rvar);
31 int npol,
int mons,
double *rel,
double *fk,
double wNsqr,
int rvar);
32 extern "C" void wGcd(
int *
x,
int n);
34 static void wDimensions(poly*
s,
int sl,
int *lpol,
int *npol,
int *mons)
40 for (i = 0; i <= sl; i++)
64 static void wInit(poly*
s,
int sl,
int mons,
int *
A,
const ring
R)
66 int n, a,
i,
j, *
B, *C;
72 a = (n + 1) *
sizeof(
int);
74 for (i = 0; i <= sl; i++)
85 for (j = 0; j < n; j++)
96 for (j = 0; j < n; j++)
108 void wCall(poly*
s,
int sl,
int *
x,
double wNsqr,
const ring
R)
110 int n, q, npol, mons,
i;
111 int *
A, *xopt, *lpol, *degw;
112 double f1, fx, eps, *rel;
116 lpol = (
int * )
omAlloc((sl + 1) *
sizeof(int));
119 for (i = n; i!=0; i--)
128 q = (n + 1) * mons *
sizeof(
int);
130 wInit(s, sl, mons, A, R);
131 degw = A + (n * mons);
132 memset(degw, 0, mons *
sizeof(
int));
133 for (i = n; i!=0; i--)
135 wNorm(degw, lpol, npol, rel);
136 f1 = (*wFunctional)(degw, lpol, npol, rel, (double)1.0, wNsqr);
139 fx = (double)2.0 * eps;
140 memset(x, 0, (n + 1) *
sizeof(
int));
143 memcpy(x + 1, xopt + 1, n *
sizeof(
int));
144 memset(degw, 0, mons *
sizeof(
int));
145 for (i = n; i!=0; i--)
154 for (i = n; i!=0; i--)
193 x = (
int * )
omAlloc(2 * (n + 1) *
sizeof(int));
194 wCall(s, sl, x, (
double)2.0 / (
double)n, R);
195 for (i = n; i!=0; i--)
196 eweight[i] = x[i + n + 1];
208 for(i=len;i>0;i--) s[i]=(*iv)[i-1];
222 for (i=
rVar(r); i>0; i--)
236 for (i=
rVar(r); i>0; i--)
237 j += (
long)((int)(
p_GetExp(p,i,r) * w[
i]));
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
const CanonicalForm int s
static int si_min(const int a, const int b)
void kEcartWeights(poly *s, int sl, short *eweight, const ring R)
long totaldegreeWecart(poly p, ring r)
short * iv2array(intvec *iv, const ring R)
static void p_GetExpV(poly p, int *ev, const ring r)
#define omFreeSize(addr, size)
static short rVar(const ring r)
#define rVar(r) (r->N)
void wAdd(int *A, int mons, int kn, int xx, int rvar)
long totaldegreeWecart_IV(poly p, ring r, const short *w)
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent : the integer VarOffset encodes:
static int max(int a, int b)
void wSecondSearch(int *A, int *x, int *lpol, int npol, int mons, double *rel, double *fk, double wNsqr, int rvar)
double(* wFunctional)(int *degw, int *lpol, int npol, double *rel, double wx, double wNsqr)
double wFunctionalMora(int *degw, int *lpol, int npol, double *rel, double wx, double wNsqr)
static void wDimensions(poly *s, int sl, int *lpol, int *npol, int *mons)
static void wInit(poly *s, int sl, int mons, int *A, const ring R)
void wCall(poly *s, int sl, int *x, double wNsqr, const ring R)
long maxdegreeWecart(poly p, int *l, ring r)
void wFirstSearch(int *A, int *x, int mons, int *lpol, int npol, double *rel, double *fopt, double wNsqr, int rvar)
void wNorm(int *degw, int *lpol, int npol, double *rel)
double wFunctionalBuch(int *degw, int *lpol, int npol, double *rel, double wx, double wNsqr)