/****************************/ /* 台形則 */ /* 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; }