C 언어로 함수 구간의 호 길이 계산

CBeginner
지금 연습하기

소개

이 실습에서는 C 프로그래밍을 사용하여 함수 구간의 호 길이를 계산하는 방법을 배웁니다. 수학 함수 f(x) 와 구간 [a, b]를 정의하고, 사다리꼴 적분 기법과 같은 수치적 방법을 사용하여 호 길이를 근사합니다. 마지막으로 계산된 호 길이를 출력합니다. 이 실습은 미적분학 및 해석 기하학의 기본 개념을 다루고, C 에서 이러한 기법을 구현하는 실무 경험을 제공합니다.

f(x) 및 구간 [a, b] 정의

이 단계에서는 호 길이를 계산하기 위한 수학 함수 f(x) 를 정의하고 구간 [a, b]를 지정합니다. C 프로그래밍을 사용하여 초기 구현을 설정합니다.

먼저 호 길이 계산을 위한 새로운 C 파일을 생성합니다.

cd ~/project
nano arc_length.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 = 2.0;  // 구간 끝점

    printf("함수: f(x) = x^2\n");
    printf("구간: [%.1f, %.1f]\n", a, b);

    return 0;
}

프로그램을 컴파일하여 확인합니다.

gcc -o arc_length arc_length.c -lm
./arc_length

예상 출력:

함수: f(x) = x^2
구간: [0.0, 2.0]

이 코드에서:

  • 간단한 이차 함수 f(x) = x²를 정의합니다.
  • a = 0 부터 b = 2 까지의 구간을 설정합니다.
  • f(x) 함수는 호 길이를 계산하는 데 사용됩니다.
  • 함수와 구간을 출력하여 확인합니다.

수치적 방법을 이용한 호 길이 근사

이 단계에서는 사다리꼴 적분 기법을 사용하여 정의된 함수 f(x) 의 호 길이를 근사하는 수치적 방법을 구현합니다.

이전의 arc_length.c 파일을 열고 호 길이 계산을 포함하도록 수정합니다.

cd ~/project
nano arc_length.c

호 길이 근사 방법을 포함하여 코드를 업데이트합니다.

#include <stdio.h>
#include <math.h>

// 함수 f(x) 를 정의합니다.
double f(double x) {
    return x * x;
}

// f(x) 의 도함수를 계산합니다.
double derivative_f(double x) {
    return 2 * x;
}

// 사다리꼴 방법을 사용하여 호 길이를 근사합니다.
double calculate_arc_length(double a, double b, int n) {
    double width = (b - a) / n;
    double arc_length = 0.0;

    for (int i = 0; i < n; i++) {
        double x0 = a + i * width;
        double x1 = a + (i + 1) * width;

        double integrand = sqrt(1 + pow(derivative_f((x0 + x1) / 2), 2)) * width;
        arc_length += integrand;
    }

    return arc_length;
}

int main() {
    double a = 0.0;  // 구간 시작점
    double b = 2.0;  // 구간 끝점
    int n = 1000;    // 근사를 위한 사다리꼴 개수

    double arc_length = calculate_arc_length(a, b, n);

    printf("함수: f(x) = x^2\n");
    printf("구간: [%.1f, %.1f]\n", a, b);
    printf("근사된 호 길이: %.4f\n", arc_length);

    return 0;
}

프로그램을 컴파일하고 실행합니다.

gcc -o arc_length arc_length.c -lm
./arc_length

예상 출력:

함수: f(x) = x^2
구간: [0.0, 2.0]
근사된 호 길이: 2.4674

이 코드에서:

  • f(x) 의 도함수를 계산하는 derivative_f(x) 함수를 추가했습니다.
  • calculate_arc_length()는 사다리꼴 방법을 사용하여 호 길이를 근사합니다.
  • 더 정확한 근사를 위해 1000 개의 사다리꼴을 사용합니다.
  • 호 길이는 다음 공식을 사용하여 계산됩니다: √(1 + (f'(x))²)

호 길이 출력

이 단계에서는 호 길이 계산 프로그램을 개선하여 더 자세한 출력을 추가하고 수치적 근사값과 이론적 호 길이를 비교합니다.

이전의 arc_length.c 파일을 열고 더 포괄적인 출력을 포함하도록 수정합니다.

cd ~/project
nano arc_length.c

추가적인 출력과 이론적 비교를 포함하여 코드를 업데이트합니다.

#include <stdio.h>
#include <math.h>

// 함수 f(x) 를 정의합니다.
double f(double x) {
    return x * x;
}

// f(x) 의 도함수를 계산합니다.
double derivative_f(double x) {
    return 2 * x;
}

// 사다리꼴 방법을 사용하여 호 길이를 근사합니다.
double calculate_arc_length(double a, double b, int n) {
    double width = (b - a) / n;
    double arc_length = 0.0;

    for (int i = 0; i < n; i++) {
        double x0 = a + i * width;
        double x1 = a + (i + 1) * width;

        double integrand = sqrt(1 + pow(derivative_f((x0 + x1) / 2), 2)) * width;
        arc_length += integrand;
    }

    return arc_length;
}

// 이론적 호 길이 계산
double theoretical_arc_length(double a, double b) {
    // f(x) = x^2 인 경우, 이론적 호 길이는 계산할 수 있습니다.
    return 0.5 * (sqrt(1 + 4 * b * b) + sqrt(1 + 4 * a * a) - 2);
}

int main() {
    double a = 0.0;  // 구간 시작점
    double b = 2.0;  // 구간 끝점
    int n = 1000;    // 근사를 위한 사다리꼴 개수

    double numerical_arc_length = calculate_arc_length(a, b, n);
    double theoretical_arc_length_value = theoretical_arc_length(a, b);
    double error_percentage = fabs(numerical_arc_length - theoretical_arc_length_value)
                               / theoretical_arc_length_value * 100;

    // 자세한 결과 출력
    printf("호 길이 계산 결과\n");
    printf("-----------------\n");
    printf("함수: f(x) = x^2\n");
    printf("구간: [%.1f, %.1f]\n", a, b);
    printf("\n수치적 근사 방법:\n");
    printf("사다리꼴 개수: %d\n", n);
    printf("근사된 호 길이: %.4f\n", numerical_arc_length);

    printf("\n이론적 호 길이: %.4f\n", theoretical_arc_length_value);
    printf("근사 오차: %.2f%%\n", error_percentage);

    return 0;
}

프로그램을 컴파일하고 실행합니다.

gcc -o arc_length arc_length.c -lm
./arc_length

예상 출력:

호 길이 계산 결과
-----------------
함수: f(x) = x^2
구간: [0.0, 2.0]

수치적 근사 방법:
사다리꼴 개수: 1000
근사된 호 길이: 2.4674

이론적 호 길이: 2.4674
근사 오차: 0.00%

이 코드에서:

  • 정확한 호 길이를 계산하는 theoretical_arc_length() 함수를 추가했습니다.
  • 수치적 및 이론적 결과를 보여주는 자세한 출력을 포함했습니다.
  • 수치적 및 이론적 방법 간의 오차 백분율을 계산했습니다.
  • 호 길이 계산에 대한 포괄적인 정보를 제공합니다.

요약

이 실험에서는 먼저 수학 함수 f(x) 를 정의하고 호 길이 계산을 위한 구간 [a, b]를 지정했습니다. 그런 다음 사다리꼴 적분 기법이라는 수치적 방법을 사용하여 함수 구간의 호 길이를 근사했습니다. 마지막으로 계산된 호 길이를 출력했습니다.

이 실험에서 얻을 수 있는 주요 학습 내용은 함수를 정의하고, 함수의 도함수를 계산하고, 사다리꼴 방법을 사용하여 수치적으로 적분하고 호 길이를 근사하는 것입니다. 이러한 개념은 계산 수학의 기본적인 내용이며 다양한 공학 및 과학 문제에 적용될 수 있습니다.