| 235 | |
| 236 | |
| 237 | static void wEstimate(int *A, int *x, int *lpol, int npol, int mons, |
| 238 | double 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 |
no test coverage detected