Blame doc/examples/multimin.c

Packit 67cb25
int
Packit 67cb25
main (void)
Packit 67cb25
{
Packit 67cb25
  size_t iter = 0;
Packit 67cb25
  int status;
Packit 67cb25
Packit 67cb25
  const gsl_multimin_fdfminimizer_type *T;
Packit 67cb25
  gsl_multimin_fdfminimizer *s;
Packit 67cb25
Packit 67cb25
  /* Position of the minimum (1,2), scale factors 
Packit 67cb25
     10,20, height 30. */
Packit 67cb25
  double par[5] = { 1.0, 2.0, 10.0, 20.0, 30.0 };
Packit 67cb25
Packit 67cb25
  gsl_vector *x;
Packit 67cb25
  gsl_multimin_function_fdf my_func;
Packit 67cb25
Packit 67cb25
  my_func.n = 2;
Packit 67cb25
  my_func.f = my_f;
Packit 67cb25
  my_func.df = my_df;
Packit 67cb25
  my_func.fdf = my_fdf;
Packit 67cb25
  my_func.params = par;
Packit 67cb25
Packit 67cb25
  /* Starting point, x = (5,7) */
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
  T = gsl_multimin_fdfminimizer_conjugate_fr;
Packit 67cb25
  s = gsl_multimin_fdfminimizer_alloc (T, 2);
Packit 67cb25
Packit 67cb25
  gsl_multimin_fdfminimizer_set (s, &my_func, x, 0.01, 1e-4);
Packit 67cb25
Packit 67cb25
  do
Packit 67cb25
    {
Packit 67cb25
      iter++;
Packit 67cb25
      status = gsl_multimin_fdfminimizer_iterate (s);
Packit 67cb25
Packit 67cb25
      if (status)
Packit 67cb25
        break;
Packit 67cb25
Packit 67cb25
      status = gsl_multimin_test_gradient (s->gradient, 1e-3);
Packit 67cb25
Packit 67cb25
      if (status == GSL_SUCCESS)
Packit 67cb25
        printf ("Minimum found at:\n");
Packit 67cb25
Packit 67cb25
      printf ("%5d %.5f %.5f %10.5f\n", iter,
Packit 67cb25
              gsl_vector_get (s->x, 0), 
Packit 67cb25
              gsl_vector_get (s->x, 1), 
Packit 67cb25
              s->f);
Packit 67cb25
Packit 67cb25
    }
Packit 67cb25
  while (status == GSL_CONTINUE && iter < 100);
Packit 67cb25
Packit 67cb25
  gsl_multimin_fdfminimizer_free (s);
Packit 67cb25
  gsl_vector_free (x);
Packit 67cb25
Packit 67cb25
  return 0;
Packit 67cb25
}