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

กฎ Simpson 1/3 สำหรับอินทิกรัลจำกัด

บทนำ

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

สูตรสำหรับกฎนี้มีดังนี้:

กฎ Simpson 1/3 สำหรับอินทิกรัลจำกัด

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

กฎ Simpson 1/3 สำหรับอินทิกรัลจำกัด

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

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