728x90

<<  주어진 함수의 근사값을 찾는 수치 해석적인 방법  >>

 

 

공식


1. 조건

1) 은 다음 반복에서의 근사 해

2) x_은 현재 반복에서의 근사 해,

3) 은 함수의 값

4)) 은 함수의 미분 값입니다.

 

 

※ 즉, 위 공식은 f(x) = 0 을 찾는 공식입니다.

 

2. 주의할 점

 

1) 미분 가능성 및 연속성:  함수가 미분 가능하고 연속적이어야 합니다.

                                           또한, 미분이 0이 되는 지점에서는 수렴이 느려지거나 수렴하지 않을 수 있습니다.

 

2) 초기 추정값의 선택: 초기 추정값에 따라 수렴 여부가 달라질 수 있습니다.

                                      부적절한 초기 추정값은 수렴을 방해하거나, 다른 해로 수렴하게 할 수 있습니다.

 

3) 계산 오류와 수렴 문제: 수학적으로 수렴이 보장되지 않는 경우가 있습니다.

                                          특히, 특정 조건에서는 발산할 수 있거나, 수렴이 매우 느릴 수 있습니다.

 

4) 함수의 복잡성: 함수가 복잡하거나 다수의 근을 가지고 있을 경우, 수렴하지 않을 수 있습니다. 

 

5) 수렴 주변의 근방에서만 유효: 초기 추정값 주변에서만 수렴이 보장됩니다.

                                                      멀리 떨어진 해에서는 다른 방법을 사용해야 할 수 있습니다.

 

6) 미분 계산의 안정성: 미분이 0이 되는 지점이나 불연속성이 있는 지점에서 문제가 발생할 수 있습니다.

 

3. 예제

 

예제

 

위 함수 일 때,

미분 공식은 : f'(x) = 2x  입니다.

이때, 초기 추정값을 x_0 = 3  으로 설정합니다.

 

1step

x_1 = 3 - ((3^2-4)) / (2*3) = 2.1667

x_2 = (2.1667 공식에 대입) = 2

x_3 = (2 공식에 대입 ) =2

 

따라서, x_2 , x_3 의 값이 2가 됨에 따라,  f(x) =0 이되는 x의 값이 2가 됨을 알 수 있습니다.

 

4. 그래프

 

그래프

 

다음과 같이 추정 값 '3' 으로 부터 근사값을 계속하여 f(x) = 0 을 알아가는 그래프를  확인 할 수 있습니다.

위 그래프에 대한 matlab 코드는 아래의 글을 통해 확인 가능합니다.

 

clc
close all
clear 
% 주어진 함수 정의
f = @(x) x.^2 - 4;

% 함수의 미분 정의
df = @(x) 2 * x;

% 초기 추정값 설정
x0 = 3;

% 반복 횟수 설정
numIterations = 10;

% x 범위 설정
xRange = linspace(-3, 4, 100);

% 함수 및 뉴턴-랩슨 반복 결과를 그래프로 나타냄
figure;

% 주어진 함수의 그래프
subplot(2, 1, 1);
plot(xRange, f(xRange), 'b-', 'LineWidth', 2);
hold on;
grid on;

% 초기 추정값을 빨간색 원으로 표시
plot(x0, f(x0), 'ro', 'MarkerSize', 10);

% 뉴턴-랩슨 반복 수행
for i = 1:numIterations
    x1 = x0 - f(x0) / df(x0);
    
    % 그래프 상에서 반복된 추정값을 선으로 연결
    plot([x0, x1], [f(x0), 0], 'r--');
    
    % 다음 반복을 위해 추정값 갱신
    x0 = x1;
end

% 최종 결과값을 녹색 별표로 표시
plot(x1, f(x1), 'g*', 'MarkerSize', 10);

% 그래프 스타일 및 레이블 설정
xlabel('x');
ylabel('f(x)');
title('Newton-Raphson Method Example');
% legend('f(x)', 'Initial Guess', 'Iteration Steps', 'Final Result');

% 주어진 함수의 그래프 및 뉴턴-랩슨 결과의 확대된 그래프
subplot(2, 1, 2);
plot(xRange, f(xRange), 'b-', 'LineWidth', 2);
hold on;
grid on;

% 초기 추정값을 빨간색 원으로 표시
plot(x0, f(x0), 'ro', 'MarkerSize', 10);

% 뉴턴-랩슨 반복 수행 (확대된 그래프)
for i = 1:numIterations
    x1 = x0 - f(x0) / df(x0);
    
    % 그래프 상에서 반복된 추정값을 선으로 연결
    plot([x0, x1], [f(x0), 0], 'r--');
    
    % 다음 반복을 위해 추정값 갱신
    x0 = x1;
end

% 최종 결과값을 녹색 별표로 표시 (확대된 그래프)
plot(x1, f(x1), 'g*', 'MarkerSize', 10);

% 그래프 스타일 및 레이블 설정
xlabel('x');
ylabel('f(x)');
title('Newton-Raphson Method Example (Zoomed In)');
% legend('f(x)', 'Initial Guess', 'Iteration Steps', 'Final Result');

% 그래프 보여주기
hold off;
728x90
반응형

+ Recent posts