MCPcopy Create free account
hub / github.com/Singular/Singular / wEstimate

Function wEstimate

libpolys/polys/weight0.cc:237–292  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

235
236
237static void wEstimate(int *A, int *x, int *lpol, int npol, int mons,
238double wx, double *rel, double *fopt, int *s0, int *s1, int *s2, double wNsqr, int rvar)
239{
240 int n, i1, i2, k0 = 0, k1 = 0, k2 = 0;
241 int *degw;
242 double fo1, fo2, fmax, wx1, wx2;
243
244 n = rvar;
245 degw = A + (n * mons);
246 fo2 = fo1 = (double)1.0e10;
247 for (i1 = n; i1!=0 ; i1--)
248 {
249 if (x[i1] > 1)
250 {
251 wSub(A, mons, i1, 1, rvar);
252 wx1 = wx - wx / (double)x[i1];
253 x[i1]--;
254 fmax = (*wFunctional)(degw, lpol, npol, rel, wx1,wNsqr);
255 if (fmax < fo1)
256 {
257 fo1 = fmax;
258 k0 = i1;
259 }
260 for (i2 = i1; i2!=0 ; i2--)
261 {
262 if (x[i2] > 1)
263 {
264 wSub(A, mons, i2, 1, rvar);
265 wx2 = wx1 - wx1 / (double)x[i2];
266 fmax = (*wFunctional)(degw, lpol, npol, rel, wx2, wNsqr);
267 if (fmax < fo2)
268 {
269 fo2 = fmax;
270 k1 = i1;
271 k2 = i2;
272 }
273 wAdd(A, mons, i2, 1, rvar);
274 }
275 }
276 wAdd(A, mons, i1, 1, rvar);
277 x[i1]++;
278 }
279 }
280 if (fo1 < fo2)
281 {
282 *fopt = fo1;
283 *s0 = k0;
284 }
285 else
286 {
287 *fopt = fo2;
288 *s0 = 0;
289 }
290 *s1 = k1;
291 *s2 = k2;
292}
293
294

Callers 1

wSecondSearchFunction · 0.85

Calls 2

wSubFunction · 0.85
wAddFunction · 0.85

Tested by

no test coverage detected