[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-gsl] gsl_multimin_fdfminimizer_conjugate_fr
From: |
Christian MOENNE-LOCCOZ |
Subject: |
[Help-gsl] gsl_multimin_fdfminimizer_conjugate_fr |
Date: |
Tue, 08 Mar 2005 12:12:26 +0100 |
User-agent: |
Mozilla Thunderbird 1.0 (Windows/20041206) |
Hello,
Can I use the gsl_multimin_fdfminimizer_conjugate_fr algorithm to
minimize all types of function ?
I copy/paste the example of code from the documentation.
For f(x) = x*x, the minimum is found.
1 4.99000 24.90010
2 4.97000 24.70090
3 4.93000 24.30490
4 4.85000 23.52250
5 4.69000 21.99610
6 4.37000 19.09690
7 3.73000 13.91290
8 2.45000 6.00250
9 -0.11000 0.01210
Minimum found at:
10 0.00000 0.00000
But for f(x) = x, it divaricates :
1 4.99000 4.99000
2 4.97000 4.97000
3 4.93000 4.93000
4 4.85000 4.85000
5 4.69000 4.69000
6 4.37000 4.37000
7 3.73000 3.73000
8 2.45000 2.45000
9 -0.11000 -0.11000
10 -5.23000 -5.23000
11 -15.47000 -15.47000
12 -35.95000 -35.95000
(...)
99 -6338253001141146039913283584.00000
-6338253001141146039913283584.00000
100 -12676506002282292079826567168.00000
-12676506002282292079826567168.00000
What's wrong ?
Thanks.
--
CML
ps : the code :
#include <gsl/gsl_vector.h>
#include <gsl/gsl_multimin.h>
#include <iostream>
using namespace std;
double
my_f (const gsl_vector *v, void *params)
{
double x;
x = gsl_vector_get(v, 0);
//return x*x;
return x;
}
void
my_df (const gsl_vector *v, void *params,
gsl_vector *df)
{
double x;
x = gsl_vector_get(v, 0);
gsl_vector_set(df, 0, 1.0);
//gsl_vector_set(df, 0, 2.0 *x);
}
void
my_fdf (const gsl_vector *x, void *params,
double *f, gsl_vector *df)
{
*f = my_f(x, params);
my_df(x, params, df);
}
int
main (void)
{
const size_t Dim =1;
size_t iter = 0;
int status;
const gsl_multimin_fdfminimizer_type *T;
gsl_multimin_fdfminimizer *s;
double par[2] = { 1.0, 2.0 };
gsl_vector *x;
gsl_multimin_function_fdf my_func;
my_func.f = &my_f;
my_func.df = &my_df;
my_func.fdf = &my_fdf;
my_func.n = Dim;
my_func.params = ∥
x = gsl_vector_alloc (Dim);
gsl_vector_set (x, 0, 5.0);
T = gsl_multimin_fdfminimizer_conjugate_fr;
s = gsl_multimin_fdfminimizer_alloc (T, Dim);
gsl_multimin_fdfminimizer_set (s, &my_func, x, 0.01, 1e-4);
do
{
iter++;
status = gsl_multimin_fdfminimizer_iterate (s);
if (status)
break;
status = gsl_multimin_test_gradient (s->gradient, 1e-3);
if (status == GSL_SUCCESS)
printf ("Minimum found at:\n");
printf ("%5d %.5f %10.5f\n", iter,
gsl_vector_get (s->x, 0),
s->f);
}
while (status == GSL_CONTINUE && iter < 100);
gsl_multimin_fdfminimizer_free (s);
gsl_vector_free (x);
return 0;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Help-gsl] gsl_multimin_fdfminimizer_conjugate_fr,
Christian MOENNE-LOCCOZ <=