定積分を求めるシンプソンの1/3則とは?公式・アルゴリズム・C++実装例を解説
シンプソンの1/3則とは
シンプソンの1/3則(Simpson's 1/3 Rule)は、台形則と同様に、区間 [a, b] における定積分の値を数値的に近似する手法です。台形則との主な違いは、台形則では区間全体を複数の台形に分割するのに対し、シンプソンの1/3則ではさらに各部分を2つに細分化し、放物線で関数を近似する点にあります。このため、台形則よりも高い精度で積分値を求められるのが特徴です。
シンプソンの1/3則の公式
この手法では、次の公式を使用します。

ここで、h は各区間の幅、n は区間の分割数を表します。h は以下の式から求めることができます。

入力と出力
入力: 関数 f(x):(x + 1/x)、下限と上限:1, 2、区間の分割数:20 出力: 答えは:2.19315
アルゴリズム
integrateSimpson(a, b, n)
入力 − 積分の下限・上限、および区間の分割数 n。
出力 − 積分計算の結果。
Begin
h := (b - a)/n
res := f(a) + f(b)
lim := n/2
for i := 1 to lim, do
oddSum := oddSum + f(a + (2i - 1)h)
done
oddSum := oddSum * 4
for i := 1 to lim-1, do
evenSum := evenSum + f(a + 2ih)
done
evenSum := evenSum * 2
res := res + oddSum + evenSum
res := res * (h/3)
return res
End
C++による実装例
#include<iostream>
#include<cmath>
using namespace std;
float mathFunc(float x) {
return (x+(1/x)); //関数 x + 1/x
}
float integrate(float a, float b, int n) {
float h, res = 0.0, oddSum = 0.0, evenSum = 0.0, lim;
int i;
h = (b-a)/n; //区間間の距離を計算
res = (mathFunc(a)+mathFunc(b)); //f(a)とf(b)による初期和
lim = n/2;
for(i = 1; i<=lim; i++)
oddSum += mathFunc(a+(2*i-1)*h); //奇数位置の項の合計
oddSum *= 4; //奇数項の合計に4を掛ける
for(i = 1; i<lim; i++)
evenSum += mathFunc(a+(2*i)*h); //偶数位置の項の合計
evenSum *= 2; //偶数項の合計に2を掛ける
res += oddSum+evenSum;
res *= (h/3);
return res; //積分の結果を返す
}
main() {
float result, lowLim, upLim;
int interval;
cout << "Enter Lower Limit, Upper Limit and interval: ";
cin >>lowLim >>upLim >>interval;
result = integrate(lowLim, upLim, interval);
cout << "The answer is: " << result;
}
実行結果
Enter Lower Limit, Upper Limit and interval: 1 2 20 The answer is: 2.19315
このプログラムでは、下限1・上限2・分割数20を入力すると、関数 f(x) = x + 1/x の定積分値として 2.19315 が出力されます。分割数 n を大きくするほど、近似精度は向上します。
-
1/1! + 2/2! + 3/3! + …… + n/n! の級数の合計を求めるPythonプログラム
この記事では、与えられた問題を解くための解法とアプローチについて詳しく解説します。 問題文 整数 n が入力として与えられたとき、次の級数の合計を求めます。 1/1! + 2/2! + 3/3! + 4/4! + …… + n/n! ここでは for ループを使用して実装するため、時間計算量は O(n) となります。また、処理効率を高めるポイントとして、階乗の計算を同じループ内で同時に行っている点が挙げられます。 アルゴリズム 以下の手順で級数の合計を求めます。 合計値 res を 0、階乗値 fact を 1 で初期化します。 i を 1 から n まで順に処理し、fact *= i に
-
Windows 8.1/8でUSBデバイスが認識されないときの対処法【自分でできる解決策】
USBデバイスは手軽に使える便利な機器ですが、Windows 8.1/8にアップデートした後、パソコンのUSBポートに接続しても認識されなかったり、正常に動作しなかったりするトラブルに遭遇することがあります。 この記事では、Windows 8/8.1がUSBデバイスを認識しない場合に試せる対処法を、初心者の方にもわかるように順番にご紹介します。 対処法1:ディスクの管理でドライブが表示されるか確認する まず、USBデバイスを接続した際にWindowsがドライブを検出しているかどうかを確認しましょう。Windowsキー + Rキーを押して「ファイル名を指定して実行」ダイアログを開き、「disk