정적분(definite integral)은 사다리꼴 공식(트라페조이달 규칙, Trapezoidal Rule)을 이용해 수치적으로 계산할 수 있습니다. 함수 f(x)를 a부터 b까지 적분한다는 것은, 본질적으로 x = a에서 x = b까지 곡선 아래 영역의 넓이를 구하는 것과 같습니다.
이 넓이를 구하기 위해 전체 영역을 n개의 작은 사다리꼴로 나눕니다. 각 사다리꼴의 폭을 h라고 하면 (b − a) = nh가 성립합니다. 사다리꼴의 개수를 늘릴수록 넓이 계산 결과는 실제 값에 더 가까워지므로, 정확도를 높이려면 구간을 잘게 나누는 것이 좋습니다. 적분값은 다음 공식을 따라 구할 수 있습니다.

여기서 h는 각 구간의 폭이고, n은 구간의 개수입니다. h는 다음 식을 통해 구할 수 있습니다.

입력 및 출력
입력:
함수 f(x): 1-exp(-x/2.0), 적분 구간: 0 ~ 1, 구간 개수: 20
출력:
답: 0.21302
알고리즘
integrateTrapezoidal(a, b, n)
입력: 적분의 하한 a와 상한 b, 그리고 구간 개수 n
출력: 적분 결과
시작
h := (b - a) / n
sum := (f(a) + f(b)) / 2
for i := 1 to n-1 do
sum := sum + f(a + i*h)
done
return h * sum
종료
먼저 구간 폭 h를 구하고, 양 끝점의 함숫값 f(a)와 f(b)를 절반씩 더한 값을 초기 합계로 설정합니다. 이후 내부 구간들의 함숫값을 모두 더한 뒤, 마지막에 h를 곱하면 적분 근삿값을 얻을 수 있습니다.
C++ 예제 코드
#include<iostream>
#include<cmath>
using namespace std;
float mathFunc(float x) {
return (1 - exp(-x / 2.0)); // 함수 1 - e^(-x/2)
}
float integrate(float a, float b, int n) {
float h, sum;
int i;
h = (b - a) / n; // 인접한 두 구간 사이의 폭 계산
sum = (mathFunc(a) + mathFunc(b)) / 2; // f(a)와 f(b)로 초기 합계 설정
for (i = 1; i < n; i++) {
sum += mathFunc(a + i * h);
}
return (h * sum); // 적분 결과 반환
}
int main() {
float result, lowLim, upLim;
int interval;
cout << "하한, 상한, 구간 개수를 입력하세요: ";
cin >> lowLim >> upLim >> interval;
result = integrate(lowLim, upLim, interval);
cout << "답: " << result;
}
실행 결과
하한, 상한, 구간 개수를 입력하세요: 0 1 20
답: 0.21302
위 예제에서는 함수 1 − e^(−x/2)를 0부터 1까지 20개의 구간으로 나누어 적분했으며, 그 결과 약 0.21302를 얻었습니다. 구간 개수(n)를 더 크게 설정하면 오차가 줄어들어 해석적 적분값에 훨씬 가까운 결과를 얻을 수 있습니다. 이처럼 사다리꼴 공식은 부정적분을 구하기 어려운 함수나 실험 데이터 기반의 함수를 적분할 때 유용하게 활용되는 대표적인 수치 적분 방법입니다.