FirstIndexNext

[bug-gsl] Nelder Mead bug (2008-05-05)

From: "Michael Kuklik" <mkuklik@.........>
Subject: Nelder Mead bug
Date: Sun, 4 May 2008 21:23:27 -0400
To: bug-gsl@gnu.org

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