เช่นเดียวกับกฎสี่เหลี่ยมคางหมู กฎข้อที่ 3 ของ Simpson ยังใช้เพื่อค้นหาค่าปริพันธ์จากช่วง a ถึง b ความแตกต่างหลักระหว่างสี่เหลี่ยมคางหมูกับกฎข้อที่ 3 ของซิมป์สัน คือ ในกฎสี่เหลี่ยมคางหมู ทั้งส่วนจะถูกแบ่งออกเป็นสี่เหลี่ยมคางหมู แต่ในกรณีนี้ สี่เหลี่ยมคางหมูแต่ละอันจะแบ่งออกเป็นสองส่วนด้วย
สำหรับกฎนี้ เราจะทำตามสูตรนี้:
โดยที่ h คือความกว้างของช่วง และ n คือจำนวนช่วง เราสามารถหา h ได้โดยใช้
อินพุตและเอาต์พุต
Input: The function f(x): (x+(1/x). The lower and upper limit: 1, 2. The number of intervals: 20. Output: The answer is: 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
ตัวอย่าง
#include<iostream> #include<cmath> using namespace std; float mathFunc(float x) { return (x+(1/x)); //function 1 + 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; //calculate the distance between two interval res = (mathFunc(a)+mathFunc(b)); //initial sum using f(a) and f(b) lim = n/2; for(i = 1; i<=lim; i++) oddSum += mathFunc(a+(2*i-1)*h); //sum of numbers, placed at odd number oddSum *= 4; //odd sum are multiplied by 4 for(i = 1; i<lim; i++) evenSum += mathFunc(a+(2*i)*h); //sum of numbers, placed at even number evenSum *= 2; //even sum are multiplied by 2 res += oddSum+evenSum; res *= (h/3); return res; //The result of integration } 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