Blame doc/examples/integration.c

Packit 67cb25
#include <stdio.h>
Packit 67cb25
#include <math.h>
Packit 67cb25
#include <gsl/gsl_integration.h>
Packit 67cb25
Packit 67cb25
double f (double x, void * params) {
Packit 67cb25
  double alpha = *(double *) params;
Packit 67cb25
  double f = log(alpha*x) / sqrt(x);
Packit 67cb25
  return f;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
int
Packit 67cb25
main (void)
Packit 67cb25
{
Packit 67cb25
  gsl_integration_workspace * w 
Packit 67cb25
    = gsl_integration_workspace_alloc (1000);
Packit 67cb25
  
Packit 67cb25
  double result, error;
Packit 67cb25
  double expected = -4.0;
Packit 67cb25
  double alpha = 1.0;
Packit 67cb25
Packit 67cb25
  gsl_function F;
Packit 67cb25
  F.function = &f;
Packit 67cb25
  F.params = α
Packit 67cb25
Packit 67cb25
  gsl_integration_qags (&F, 0, 1, 0, 1e-7, 1000,
Packit 67cb25
                        w, &result, &error); 
Packit 67cb25
Packit 67cb25
  printf ("result          = % .18f\n", result);
Packit 67cb25
  printf ("exact result    = % .18f\n", expected);
Packit 67cb25
  printf ("estimated error = % .18f\n", error);
Packit 67cb25
  printf ("actual error    = % .18f\n", result - expected);
Packit 67cb25
  printf ("intervals       = %zu\n", w->size);
Packit 67cb25
Packit 67cb25
  gsl_integration_workspace_free (w);
Packit 67cb25
Packit 67cb25
  return 0;
Packit 67cb25
}