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 {
250 {
251 wSub(
A, mons, i1, 1, rvar);
252 wx1 = wx - wx / (double)
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 {
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);
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}
static void wSub(int *A, int mons, int kn, int xx, int rvar)
void wAdd(int *A, int mons, int kn, int xx, int rvar)