[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-gsl] Nelder Mead bug
From: |
Michael Kuklik |
Subject: |
[Bug-gsl] Nelder Mead bug |
Date: |
Sun, 4 May 2008 21:23:27 -0400 |
Hi everyone,
Nelder Mead , i.e. simplex search has a bug. In the function
static int
nmsimplex_iterate (void *vstate, gsl_multimin_function * f,
gsl_vector * x, double *size, double *fval)
in multimin/simplex.c
a piece of code that determines the highest , second highest and lowest
vertex fails when first value in y1 is the highest.
It returns second highest equal to the highest. Later that influence
decision in the algorithm.
FIX:
add lines:
ds_hi = gsl_vector_get (y1, 1);
s_hi = 1;
before the loop
CODE SHOULD LOOK LIKE THIS:
...
if (xc->size != x->size)
{
GSL_ERROR("incompatible size of x", GSL_EINVAL);
}
/* get index of highest, second highest and lowest point */
dhi = ds_hi = dlo = gsl_vector_get (y1, 0);
ds_hi = gsl_vector_get (y1, 1);
s_hi = 1;
for (i = 1; i < n; i++)
{
val = (gsl_vector_get (y1, i));
if (val < dlo)
{
dlo = val;
lo = i;
}
...
Cheers,
Michal Kuklik
- [Bug-gsl] Nelder Mead bug,
Michael Kuklik <=