Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

กฎ 1/3 ของ Simpson สำหรับอินทิกรัลที่แน่นอน


เช่นเดียวกับกฎสี่เหลี่ยมคางหมู กฎข้อที่ 3 ของ Simpson ยังใช้เพื่อค้นหาค่าปริพันธ์จากช่วง a ถึง b ความแตกต่างหลักระหว่างสี่เหลี่ยมคางหมูกับกฎข้อที่ 3 ของซิมป์สัน คือ ในกฎสี่เหลี่ยมคางหมู ทั้งส่วนจะถูกแบ่งออกเป็นสี่เหลี่ยมคางหมู แต่ในกรณีนี้ สี่เหลี่ยมคางหมูแต่ละอันจะแบ่งออกเป็นสองส่วนด้วย

สำหรับกฎนี้ เราจะทำตามสูตรนี้:

กฎ 1/3 ของ Simpson สำหรับอินทิกรัลที่แน่นอน

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

กฎ 1/3 ของ Simpson สำหรับอินทิกรัลที่แน่นอน

อินพุตและเอาต์พุต

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