関数f(x)=4/x^2+1を区間0<=x<=1で積分したときの値をシンプソンの公式を用いて計算するプログラムを作っています。
シンプソンの公式を使えば、台形公式よりも高い精密度で計算することができます。公式については添付された画像を参照して下さい。
この積分値はπであり、プログラムを実行すればπに近い値になるはずです。
プログラムを実際に作成して実行したところ、偶数部分の和だけ反映されず、πとは全く異なる値になってしまいました。
この原因が分かれば教えて下さい。よろしくお願いします。
プログラムは画像の下側にあります。
/* 被積分関数 */ double f(double x) { /return 4/(1+(x*x)); /* 関数f(x)の値を計算して返す */ } double integ(double a, double b, int n) { /* * ★ 関数f(x)の区間[a,b]における積分を * 分割数nのシンプソン公式で求め、その値を返す。 */ double I = 0; int m; double h = (b-a)/n; I += h*1/3*f(a)+h*1/3*f(b); for( m=1; m<=n-1; m += 2){ I += (4/3)*h*f(a+m*h); } for( m=2; m<=n-2; m += 2){ I += 2/3*h*f(a+m*h); } return I; } int main(void) { double a, b; int n; a = 0; b = 1; /* nを4から20まで4刻みで変えながら繰り返す */ for (n=4; n<=20; n += 4) { printf("%d %10.7f\n", n, integ(a, b, n)); } return 0; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/18 07:53
2019/12/18 07:57