Edited at

[C言語] 数値積分(シンプソンの公式)

More than 3 years have passed since last update.

GitHubにも公開中。



シンプソンの1/3公式


\sum_{i=0}^{\frac{n}{2}-1} \frac{ \{f(x_{2i}) + 4f(x_{2i+1}) + f(x_{2i+2})\} Δx}{3}


積分 $S = \int_0^b sinx dx$をシンプソンの$\frac{1}{3}$公式を用いて$b = 0°〜360°$まで$1°$刻みで変えた場合を計算し、bとSの関係をグラフにする。

#include <stdio.h>

#include <math.h>
#define f(x) sin(x)

int main(void) {
double a, b, x, x1, x2, dx, s, s1;
int n;

printf("分割数を入力して下さい。 n = ");
scanf("%d", &n);

a = 0;

FILE *data;
data = fopen("problem_data.csv", "w");

for (int i=0; i<=360; i++) {
b = i*(M_PI/180.);
dx = (b-a)/(2*n);
s = 0;

for(int j=0; j<=n; j++) {
x = a + 2*j*dx;
x1 = x + dx;
x2 = x + 2*dx;
s1 = ( ( f(x) + 4*f(x1) + f(x2) )/3 )*dx;
s += s1;
}

fprintf(data, "%f, %f\n", b, s);
}

fclose(data);

printf("n = %d s = %f\n", n, s);

return 0;
}

こんな感じ

result.png