사다리꼴 규칙과 마찬가지로 Simpson의 1/3 규칙은 a에서 b까지의 범위에서 정수 값을 찾는 데에도 사용됩니다. 사다리꼴과 심슨의 1/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