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