근사 근 출력
이 단계에서는 뉴턴 방법 구현을 개선하여 근사 근에 대한 자세한 출력을 제공합니다.
이전 newton_method.c 파일을 엽니다.
cd ~/project
nano newton_method.c
근사 근 출력을 개선하도록 코드를 업데이트합니다.
#include <stdio.h>
#include <math.h>
// 이전 함수 및 메서드 정의는 동일하게 유지됩니다.
double f(double x) {
return x * x - 4;
}
double f_derivative(double x) {
return 2 * x;
}
double newton_method(double initial_guess, int max_iterations, double tolerance) {
double x = initial_guess;
printf("뉴턴 방법 근사 근\n");
printf("---------------------\n");
printf("초기 추측값: %f\n", x);
printf("허용 오차: %e\n", tolerance);
printf("최대 반복 횟수: %d\n\n", max_iterations);
for (int i = 0; i < max_iterations; i++) {
double fx = f(x);
double fpx = f_derivative(x);
if (fabs(fpx) < tolerance) {
printf("오류: 도함수가 0 에 너무 가깝습니다.\n");
return x;
}
double x_next = x - fx / fpx;
printf("반복 %d:\n", i + 1);
printf(" 현재 x: %f\n", x_next);
printf(" f(x): %f\n", f(x_next));
printf(" |x_next - x|: %e\n\n", fabs(x_next - x));
if (fabs(x_next - x) < tolerance) {
printf("수렴 성공!\n");
return x_next;
}
x = x_next;
}
printf("최대 반복 횟수에 도달했습니다.\n");
return x;
}
int main() {
double initial_guess = 1.0;
int max_iterations = 10;
double tolerance = 1e-6;
double root = newton_method(initial_guess, max_iterations, tolerance);
printf("최종 결과:\n");
printf("---------\n");
printf("근사 근: %f\n", root);
printf("f(근): %f\n", f(root));
printf("절대 오차: %e\n", fabs(f(root)));
return 0;
}
코드를 컴파일하고 실행합니다.
gcc -o newton_method newton_method.c -lm
./newton_method
예시 출력:
뉴턴 방법 근사 근
---------------------
초기 추측값: 1.000000
허용 오차: 1.000000e-06
최대 반복 횟수: 10
반복 1:
현재 x: 2.500000
f(x): 2.250000
|x_next - x|: 1.500000e+00
반복 2:
현재 x: 2.050000
f(x): 0.202500
|x_next - x|: 4.500000e-01
... (반복 횟수)
수렴 성공!
최종 결과:
---------
근사 근: 2.000000
f(근): 0.000000
절대 오차: 0.000000e+00
주요 개선 사항:
- 자세한 반복 정보 추가
- 초기 매개변수 표시
- 수렴 진행 상황 표시
- 최종 결과와 절대 오차 출력