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