Blame doc/examples/roots.c

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
}