Blame doc/examples/nmsimplex.c

Packit 67cb25
int 
Packit 67cb25
main(void)
Packit 67cb25
{
Packit 67cb25
  double par[5] = {1.0, 2.0, 10.0, 20.0, 30.0};
Packit 67cb25
Packit 67cb25
  const gsl_multimin_fminimizer_type *T = 
Packit 67cb25
    gsl_multimin_fminimizer_nmsimplex2;
Packit 67cb25
  gsl_multimin_fminimizer *s = NULL;
Packit 67cb25
  gsl_vector *ss, *x;
Packit 67cb25
  gsl_multimin_function minex_func;
Packit 67cb25
Packit 67cb25
  size_t iter = 0;
Packit 67cb25
  int status;
Packit 67cb25
  double size;
Packit 67cb25
Packit 67cb25
  /* Starting point */
Packit 67cb25
  x = gsl_vector_alloc (2);
Packit 67cb25
  gsl_vector_set (x, 0, 5.0);
Packit 67cb25
  gsl_vector_set (x, 1, 7.0);
Packit 67cb25
Packit 67cb25
  /* Set initial step sizes to 1 */
Packit 67cb25
  ss = gsl_vector_alloc (2);
Packit 67cb25
  gsl_vector_set_all (ss, 1.0);
Packit 67cb25
Packit 67cb25
  /* Initialize method and iterate */
Packit 67cb25
  minex_func.n = 2;
Packit 67cb25
  minex_func.f = my_f;
Packit 67cb25
  minex_func.params = par;
Packit 67cb25
Packit 67cb25
  s = gsl_multimin_fminimizer_alloc (T, 2);
Packit 67cb25
  gsl_multimin_fminimizer_set (s, &minex_func, x, ss);
Packit 67cb25
Packit 67cb25
  do
Packit 67cb25
    {
Packit 67cb25
      iter++;
Packit 67cb25
      status = gsl_multimin_fminimizer_iterate(s);
Packit 67cb25
      
Packit 67cb25
      if (status) 
Packit 67cb25
        break;
Packit 67cb25
Packit 67cb25
      size = gsl_multimin_fminimizer_size (s);
Packit 67cb25
      status = gsl_multimin_test_size (size, 1e-2);
Packit 67cb25
Packit 67cb25
      if (status == GSL_SUCCESS)
Packit 67cb25
        {
Packit 67cb25
          printf ("converged to minimum at\n");
Packit 67cb25
        }
Packit 67cb25
Packit 67cb25
      printf ("%5d %10.3e %10.3e f() = %7.3f size = %.3f\n", 
Packit 67cb25
              iter,
Packit 67cb25
              gsl_vector_get (s->x, 0), 
Packit 67cb25
              gsl_vector_get (s->x, 1), 
Packit 67cb25
              s->fval, size);
Packit 67cb25
    }
Packit 67cb25
  while (status == GSL_CONTINUE && iter < 100);
Packit 67cb25
  
Packit 67cb25
  gsl_vector_free(x);
Packit 67cb25
  gsl_vector_free(ss);
Packit 67cb25
  gsl_multimin_fminimizer_free (s);
Packit 67cb25
Packit 67cb25
  return status;
Packit 67cb25
}