は、 関数 を変数にしている、いわゆる汎関数である。 というわけで、 数値積分公式のプログラミングなどでは、 関数を引数にするのが自然である。 次は台形公式により数値積分を行う、 関数 trapezoidal() のプログラム例である。
/* * ex1.c --- 1/x の [1,2] における定積分を複合台形則で計算する */ #include <stdio.h> #include <math.h> typedef double rrfunction(double); rrfunction f; double trapezoidal(rrfunction, double, double, int); int main() { int N; double I, T; I = log(2.0); printf("台形則\n"); printf(" N 近似値 誤差\n"); for (N = 1; N <= (1 << 16); N *= 2) { T = trapezoidal(f, 1.0, 2.0, N); printf("%5d\t%25.18f\t%e\n", N, T, I - T); } return 0; } double trapezoidal(rrfunction f, double a, double b, int N) { int j; double h, T; h = (b - a) / N; T = (f(a) + f(b)) / 2; for (j = 1; j < N; j++) T += f(a + j * h); T *= h; return T; } double f(double x) { return 1 / x; } |