Last Update: Oct. 4, 2007
/***********************************************/
/* T.Kouya's GSL sample program collection */
/* Numerical Integration */
/* Written by Tomonori Kouya */
/* */
/* Version 0.01: 2007-10-04 */
/***********************************************/
#include <stdio.h>
#include <math.h>
#include <gsl/gsl_errno.h>
#include <gsl/gsl_integration.h>
#define LIMIT_SIZE 1000
/* integrant */
/* sin(x) */
double func(const double x, void *param)
{
return sin(x);
}
int main(void)
{
int i, times, status;
gsl_function f;
gsl_integration_workspace *workspace;
double a, b, ret, ret_abserr;
/* set integration interval and integrant */
a = 0.0;
b = M_PI;
f.function = &func;
f.params = 0;
/* Define type of Interpolation */
workspace = gsl_integration_workspace_alloc(LIMIT_SIZE);
/* QAG adaptive integraion */
gsl_integration_qag(&f, a, b, 1.0e-20, 1.0e-10, LIMIT_SIZE, GSL_INTEG_GAUSS41, workspace, &ret, &ret_abserr);
/* print */
printf("QAG (exact_abserr, returned abserr): %25.17e (%10.3e, %10.3e)\n", ret, fabs(ret - 2.0), ret_abserr);
/* free */
gsl_integration_workspace_free(workspace);
return 0;
}
$ ./integration QAG (exact_abserr, returned abserr): 2.00000000000000000e+00 ( 0.000e+00, 2.220e-14)