|
Packit |
67cb25 |
#include <stdio.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_errno.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_math.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_roots.h>
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
#include "demo_fn.h"
|
|
Packit |
67cb25 |
#include "demo_fn.c"
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
main (void)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int status;
|
|
Packit |
67cb25 |
int iter = 0, max_iter = 100;
|
|
Packit |
67cb25 |
const gsl_root_fsolver_type *T;
|
|
Packit |
67cb25 |
gsl_root_fsolver *s;
|
|
Packit |
67cb25 |
double r = 0, r_expected = sqrt (5.0);
|
|
Packit |
67cb25 |
double x_lo = 0.0, x_hi = 5.0;
|
|
Packit |
67cb25 |
gsl_function F;
|
|
Packit |
67cb25 |
struct quadratic_params params = {1.0, 0.0, -5.0};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
F.function = &quadratic;
|
|
Packit |
67cb25 |
F.params = ¶m;;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
T = gsl_root_fsolver_brent;
|
|
Packit |
67cb25 |
s = gsl_root_fsolver_alloc (T);
|
|
Packit |
67cb25 |
gsl_root_fsolver_set (s, &F, x_lo, x_hi);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
printf ("using %s method\n",
|
|
Packit |
67cb25 |
gsl_root_fsolver_name (s));
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
printf ("%5s [%9s, %9s] %9s %10s %9s\n",
|
|
Packit |
67cb25 |
"iter", "lower", "upper", "root",
|
|
Packit |
67cb25 |
"err", "err(est)");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
do
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
iter++;
|
|
Packit |
67cb25 |
status = gsl_root_fsolver_iterate (s);
|
|
Packit |
67cb25 |
r = gsl_root_fsolver_root (s);
|
|
Packit |
67cb25 |
x_lo = gsl_root_fsolver_x_lower (s);
|
|
Packit |
67cb25 |
x_hi = gsl_root_fsolver_x_upper (s);
|
|
Packit |
67cb25 |
status = gsl_root_test_interval (x_lo, x_hi,
|
|
Packit |
67cb25 |
0, 0.001);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if (status == GSL_SUCCESS)
|
|
Packit |
67cb25 |
printf ("Converged:\n");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n",
|
|
Packit |
67cb25 |
iter, x_lo, x_hi,
|
|
Packit |
67cb25 |
r, r - r_expected,
|
|
Packit |
67cb25 |
x_hi - x_lo);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
while (status == GSL_CONTINUE && iter < max_iter);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_root_fsolver_free (s);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return status;
|
|
Packit |
67cb25 |
}
|