/****************************/
/* 台形則 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
#include <math.h>
double snx(double);
double daikei(double, double, int, double(*)(double));
int main()
{
double y, pi2 = 2.0 * atan(1.0);
y = daikei(0.0, pi2, 100, snx);
printf("result %f\n", y);
return 0;
}
/****************/
/* 関数値の計算 */
/****************/
double snx(double x)
{
return sin(x);
}
/******************************************************/
/* 数値積分(台形則) */
/* x1 : 下限 */
/* x2 : 上限 */
/* n : 分割数 */
/* fun : 関数名(f) */
/* return : 積分値 */
/******************************************************/
double daikei(double x1, double x2, int n, double(*fun)(double))
{
double s = 0.0;
double x, h;
int i1;
h = (x2 - x1) / n;
x = x1;
for (i1 = 0; i1 < n-1; i1++) {
x += h;
s += (*fun)(x);
}
s = 0.5 * h * ((*fun)(x1) + (*fun)(x2) + 2.0 * s);
return s;
}