근사 적분 출력
이 마지막 단계에서는 Simpson's Rule 구현을 개선하여 더 자세한 출력을 추가하고 수치 근사값을 정확한 적분 값과 비교합니다.
이전 파일을 엽니다.
cd ~/project
nano simpson_integration.c
보다 포괄적인 출력을 포함하도록 코드를 업데이트합니다.
#include <stdio.h>
#include <math.h>
// 함수 적분: f(x) = x^2
double f(double x) {
return x * x;
}
// f(x) = x^2 의 정확한 적분 계산 (a 부터 b 까지)
double exact_integral(double a, double b) {
return (pow(b, 3) - pow(a, 3)) / 3.0;
}
// Simpson's Rule 구현
double simpsons_rule(double a, double b, int n) {
double h = (b - a) / n; // 각 부분 구간의 너비
double sum = f(a) + f(b); // 첫 번째와 마지막 점
// 짝수 및 홀수 점의 합 계산
for (int i = 1; i < n; i++) {
double x = a + i * h;
sum += (i % 2 == 0 ? 2 : 4) * f(x);
}
return (h / 3) * sum;
}
int main() {
// 적분 구간 [a, b] 정의
double a = 0.0; // 하한
double b = 1.0; // 상한
int n = 100; // 부분 구간의 개수 (짝수여야 함)
// 근사값 및 정확한 적분 계산
double approx_integral = simpsons_rule(a, b, n);
double exact_value = exact_integral(a, b);
double error = fabs(exact_value - approx_integral);
// 자세한 결과 출력
printf("적분 근사 결과:\n");
printf("------------------------------\n");
printf("함수: f(x) = x^2\n");
printf("구간: [%.2f, %.2f]\n", a, b);
printf("부분 구간 개수: %d\n\n", n);
printf("근사값 (Simpson's Rule): %.6f\n", approx_integral);
printf("정확한 값: %.6f\n", exact_value);
printf("절대 오차: %.6f\n", error);
printf("상대 오차: %.4f%%\n", (error / exact_value) * 100);
return 0;
}
컴파일 및 실행합니다.
gcc simpson_integration.c -o simpson_integration -lm
./simpson_integration
예상 출력:
적분 근사 결과:
------------------------------
함수: f(x) = x^2
구간: [0.00, 1.00]
부분 구간 개수: 100
근사값 (Simpson's Rule): 0.333333
정확한 값: 0.333333
절대 오차: 0.000000
상대 오차: 0.0000%
이 단계에서 추가된 주요 내용:
- 정확한 적분 값을 계산하는
exact_integral() 함수 추가
- 절대 오차 및 상대 오차 계산
- 자세한 적분 결과를 보여주는 서식화된 출력 생성