บทนำ
เช่นเดียวกับกฎสี่เหลี่ยมคางหมู (Trapezoidal Rule) กฎ Simpson 1/3 ก็ใช้หาค่าอินทิกรัลจากช่วง a ถึง b ความแตกต่างหลักคือ ในกฎสี่เหลี่ยมคางหมู พื้นที่ทั้งหมดถูกแบ่งเป็นสี่เหลี่ยมคางหมู แต่ในกฎ Simpson 1/3 แต่ละสี่เหลี่ยมคางหมูก็ถูกแบ่งอีกสองส่วน
สูตรสำหรับกฎนี้มีดังนี้:

โดยที่ h คือความกว้างของช่วง และ n คือจำนวนช่วง สามารถหา h ได้จาก:

อินพุตและเอาต์พุต
Input: ฟังก์ชัน f(x): (x + (1/x)) ขอบเขตล่างและบน: 1, 2 จำนวนช่วง: 20 Output: คำตอบคือ: 2.19315
อัลกอริทึม
integrateSimpson(a, b, n)
Input: ขอบเขตล่างและบนของอินทิกรัล และจำนวนช่วง n
Output: ผลลัพธ์หลังการอินทิเกรต
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