소개
이 실습에서는 C 언어를 사용하여 사다리꼴 규칙 (trapezoidal rule) 을 이용하여 적분을 근사하는 방법을 배웁니다. 이 실습은 다음 단계를 포함합니다: 1) 함수 f(x) 와 구간 [a, b]를 정의하고, 2) 구간을 분할하고 사다리꼴 공식을 적용하여 근사적인 적분을 계산하고, 3) 최종 결과를 출력합니다. 이 실습은 C 프로그래밍 언어를 사용하여 수치적 적분 기법에 대한 실질적인 이해를 제공하는 것을 목표로 합니다.
이 실습에서는 C 언어를 사용하여 사다리꼴 규칙 (trapezoidal rule) 을 이용하여 적분을 근사하는 방법을 배웁니다. 이 실습은 다음 단계를 포함합니다: 1) 함수 f(x) 와 구간 [a, b]를 정의하고, 2) 구간을 분할하고 사다리꼴 공식을 적용하여 근사적인 적분을 계산하고, 3) 최종 결과를 출력합니다. 이 실습은 C 프로그래밍 언어를 사용하여 수치적 적분 기법에 대한 실질적인 이해를 제공하는 것을 목표로 합니다.
이 단계에서는 C 언어를 사용하여 사다리꼴 규칙 (trapezoidal rule) 을 이용한 수치적분을 위해 수학 함수 f(x) 를 정의하고 구간 [a, b]를 지정합니다.
먼저, 적분 근사를 구현하기 위한 새로운 C 소스 파일을 생성합니다.
cd ~/project
nano integral_approximation.c
이제 함수와 구간을 정의하는 초기 코드를 작성합니다.
#include <stdio.h>
#include <math.h>
// 적분할 함수 f(x) 를 정의합니다.
double f(double x) {
// 예시: f(x) = x^2
return x * x;
}
int main() {
// 구간 [a, b] 를 정의합니다.
double a = 0.0; // 하한
double b = 1.0; // 상한
printf("적분 근사\n");
printf("함수: f(x) = x^2\n");
printf("구간: [%.2f, %.2f]\n", a, b);
return 0;
}
컴파일 및 실행하여 확인해 봅시다.
gcc -o integral_approximation integral_approximation.c -lm
./integral_approximation
예상 출력:
적분 근사
함수: f(x) = x^2
구간: [0.00, 1.00]
이 코드에서 다음을 정의했습니다.
f(x)f(x) 함수는 적분하고자 하는 임의의 수학 함수로 수정할 수 있습니다.
이 단계에서는 구간을 분할하고 근사적인 적분을 계산하여 수치적분에 사다리꼴 규칙 (trapezoidal rule) 을 구현하는 방법을 보여주는 코드를 수정합니다.
이전 소스 파일을 열고 코드를 업데이트합니다.
cd ~/project
nano integral_approximation.c
다음 구현으로 내용을 바꿉니다.
#include <stdio.h>
#include <math.h>
// 적분할 함수 f(x) 를 정의합니다.
double f(double x) {
return x * x;
}
// 사다리꼴 규칙 구현
double trapezoidalRule(double a, double b, int n) {
double h = (b - a) / n; // 각 사다리꼴의 폭
double sum = 0.5 * (f(a) + f(b)); // 첫 번째와 마지막 점
for (int i = 1; i < n; i++) {
double x = a + i * h;
sum += f(x);
}
return sum * h;
}
int main() {
// 구간 [a, b] 를 정의합니다.
double a = 0.0; // 하한
double b = 1.0; // 상한
int n = 100; // 사다리꼴의 개수
double approximateIntegral = trapezoidalRule(a, b, n);
printf("적분 근사\n");
printf("함수: f(x) = x^2\n");
printf("구간: [%.2f, %.2f]\n", a, b);
printf("사다리꼴 개수: %d\n", n);
printf("근사적인 적분 값: %.6f\n", approximateIntegral);
return 0;
}
업데이트된 코드를 컴파일하고 실행합니다.
gcc -o integral_approximation integral_approximation.c -lm
./integral_approximation
예상 출력:
적분 근사
함수: f(x) = x^2
구간: [0.00, 1.00]
사다리꼴 개수: 100
근사적인 적분 값: 0.333333
이 구현의 주요 내용:
trapezoidalRule() 함수는 근사적인 적분을 계산합니다.h는 각 사다리꼴의 폭을 나타냅니다.n은 근사에 사용할 사다리꼴의 개수를 결정합니다.n 값을 증가시키면 근사 정확도가 향상됩니다.이 단계에서는 적분 근사 프로그램을 개선하여 더 자세한 출력을 추가하고 수치 결과를 정확한 적분 값과 비교합니다.
이전 소스 파일을 열고 코드를 업데이트합니다.
cd ~/project
nano integral_approximation.c
보다 포괄적인 출력을 포함하도록 코드를 수정합니다.
#include <stdio.h>
#include <math.h>
// 적분할 함수 f(x) 를 정의합니다.
double f(double x) {
return x * x;
}
// x^2 를 0 부터 1 까지 적분한 정확한 적분 값 계산
double exactIntegral() {
return 1.0 / 3.0;
}
// 사다리꼴 규칙 구현
double trapezoidalRule(double a, double b, int n) {
double h = (b - a) / n; // 각 사다리꼴의 폭
double sum = 0.5 * (f(a) + f(b)); // 첫 번째와 마지막 점
for (int i = 1; i < n; i++) {
double x = a + i * h;
sum += f(x);
}
return sum * h;
}
int main() {
// 구간 [a, b] 를 정의합니다.
double a = 0.0; // 하한
double b = 1.0; // 상한
int n = 100; // 사다리꼴의 개수
double approximateIntegral = trapezoidalRule(a, b, n);
double exact = exactIntegral();
double error = fabs(approximateIntegral - exact);
double percentError = (error / exact) * 100.0;
// 자세한 정보를 포함한 서식화된 출력
printf("적분 근사 결과\n");
printf("------------------------------\n");
printf("함수: f(x) = x^2\n");
printf("구간: [%.2f, %.2f]\n", a, b);
printf("사다리꼴 개수: %d\n", n);
printf("\n수치 결과:\n");
printf("근사적인 적분 값: %.6f\n", approximateIntegral);
printf("정확한 적분 값: %.6f\n", exact);
printf("\n오차 분석:\n");
printf("절대 오차: %.6f\n", error);
printf("상대 오차: %.4f%%\n", percentError);
return 0;
}
업데이트된 코드를 컴파일하고 실행합니다.
gcc -o integral_approximation integral_approximation.c -lm
./integral_approximation
예상 출력:
적분 근사 결과
------------------------------
함수: f(x) = x^2
구간: [0.00, 1.00]
사다리꼴 개수: 100
수치 결과:
근사적인 적분 값: 0.333333
정확한 적분 값: 0.333333
오차 분석:
절대 오차: 0.000000
상대 오차: 0.0000%
이 버전의 주요 개선 사항:
exactIntegral() 함수를 추가했습니다.이 실험에서는 C 언어를 사용하여 사다리꼴 규칙 (trapezoidal rule) 을 이용하여 적분을 근사하는 방법을 배웠습니다. 먼저, 수치적분을 위해 수학 함수 f(x) 와 구간 [a, b]를 정의했습니다. 그런 다음, 구간을 분할하고 사다리꼴 공식을 적용하여 근사적인 적분 값을 계산하는 사다리꼴 규칙을 구현했습니다. 마지막으로, 적분 근사 결과를 출력했습니다.
이 실험의 핵심 단계는 함수와 구간을 정의하고, 구간을 분할하며, 사다리꼴 공식을 적용하여 근사적인 적분 값을 계산하는 것이었습니다. 이러한 단계들을 따름으로써 C 언어에서 간단하고 효과적인 수치적분 기법을 구현할 수 있었습니다.