I think that the body of take_step() function in
multimin/directional_minimize.c :
{
gsl_vector_set_zero (dx);
gsl_blas_daxpy (-step * lambda, p, dx);
gsl_vector_memcpy (x1, x);
gsl_blas_daxpy (1.0, dx, x1);
}
can be replaced by more efficient code:
{
int i;
double dx_temp;
for(i = 0; i < dx->size; i++)
{
dx_temp = -step * lambda * gsl_vector_get(p, i);
gsl_vector_set(dx, i, dx_temp);
gsl_vector_set(x1, i, gsl_vector_get(x, i) + dx_temp);
}
}
There are also similar parts of code inside miltimin routines which
may be
replaced.