| 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 | 
桂田 祐史