|
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 |
}
|