nint.h |
/* * nint.h --- 複合台形則, 複合中点則, 複合 Simpson 則 */ typedef double rrfunction(double); double trapezoidal(rrfunction, double, double, int); double midpoint(rrfunction, double, double, int); double simpson(rrfunction, double, double, int); |
nint.c |
/* * nint.c --- 複合台形則, 複合中点則, 複合 Simpson 則 * * コンパイル: gcc -c nint.c */ #include <math.h> #include "nint.h" /* 関数 f の [a,b] における積分の複合台形則による数値積分 T_m */ double trapezoidal(rrfunction f, double a, double b, int m) { int j; double h = (b - a)/ m, T = (f(a) + f(b)) / 2; for (j = 1; j < m; j++) T += f(a + j * h); T *= h; return T; } /* 関数 f の [a,b] における積分の複合中点則による数値積分 M_m */ double midpoint(rrfunction f, double a, double b, int m) { int j; double h = (b - a) / m, C = 0.0; for (j = 1; j <= m; j++) C += f(a + (j - 0.5) * h); C *= h; return C; } /* 関数 f の [a,b] における積分の複合 Simpson 則による数値積分 S_{2m} */ double simpson(rrfunction f, double a, double b, int m) { return (trapezoidal(f, a, b, m) + 2 * midpoint(f, a, b, m)) / 3; } |
nint.c をコンパイルして nint.o を作っておく。
nint.o の作り方 |
gcc -O -c nint.c |