/* e(-x^2) の区間 -1≦x≦1 における定積分の近似値を求める */
/* 数値積分には複合中点則を使用 */
#include<stdio.h>
#include<math.h> /* 指数関数の計算に必要 */
#define N 10 /* 区間の分割数 */
#define XMIN -1.0 /* 区間の左端 */
#define XMAX 1.0 /* 区間の右端 */
double midpointrule(double xmin, double xmax, int n); /* 定積分計算をする関数のプロトタイプ宣言 */
double func(double x); /* 被積分関数を定義する部分のプロトタイプ宣言 */
main()
{
int n = N;
double xmin = XMIN;
double xmax = XMAX;
double val;
val = midpointrule(xmin, xmax, n); /* 定積分計算 */
printf("e^(-x^2) の区間 -1≦x≦1 における定積分の\n");
printf("%d 点を用いた中点則による近似値は %18.14lf です\n",n,val);
}
/* 複合中点則を利用した数値積分を行う関数 */
double midpointrule(double xmin, double xmax, int n)
{
double dx;
double x;
double val = 0.0;
int j;
dx = (xmax - xmin)/((double)n);
for (j = 0;j < n;j++){
x = xmin + ((double)j + 0.5)*dx; /* 各区間の中点を計算 */
val += func(x);
}
val*= dx;
return val;
}
/* 被積分関数を設定 */
double func(double x)
{
return exp(-x*x); /* ここに被積分関数の具体的なものが入る */
}