수치해석

Newton-Raphson Method 소개 및 코드 구현

슬기로운공돌생활 2023. 5. 7. 19:34

Newton-Rapshon Method

Newton-Raphson Method는 아이작 뉴턴(Isaac Newton)과 조셉 랩슨(Joseph Raphson)의 이름을 따서 명명된 기법으로 방정식의 해를 구하는 방법으로 널리 사용되고 있습니다.  Newton-Raphson Method는 방정식의 해를 구할 때 더 정확한 근사치를 계속해서 찾아나가는 알고리즘입니다.

1. Newton-Raphson Method 유도

Newton-Rapshon Method는 근에 대한 초기 값은 알 수 없기 때문에 적당한 값을 가정하여 사용합니다. 본 식에서는 Newton-Raphson Method를 유도하기 위해 초기 가정값을  \( x_{i} \)로 설정하였습니다.

이때 [ \( x_{i},  f(x_{i}) \) ]의 접선을 그릴 수 있는데 이 때 접선이 \( x \) 축과 만나는 점이 개선된 근사치 \( x_{i+1} \)가 됩니다. 즉 아래 그림에서 확인할 수 있듯이 \( x_{i+1} \)은 \( x_{i} \)보다 \( f(x) \)의 해에 더 가까워 진 것을 확인할 수 있습니다. 이 방법을 반복할 수록 \( x \)는 보다 개선된 근사치를 가지게 됩니다.

Newton-Raphson Method 유도

위의 그림에서 \( x_{i} \) 일 때 도함수의 기울기는 아래 식으로 표현될 수 있습니다.

$$ f^{'}(x_{i}) = \frac{f(x_{i})-0}{x_{i}-x_{i+1}} $$

도함수의 기울기 식을 정리하면 아래와 같이 개선된 근사치 값 \( x_{i+1} \)으로 정리할 수 있으며 아래의 식을 반복하여 근사치를 찾아나가는 방법을 Newton-Raphon Method라고 합니다.

$$ f^{'}(x_{i})({x_{i}-x_{i+1}}) = {f(x_{i})-0} $$

$$ x_{i} -x_{i+1} = \frac{f(x_{i})}{f^{'}(x_{i})} $$

$$  x_{i} = \frac{f(x_{i})}{f^{'}(x_{i})}+x_{i+1} $$

$$ x_{i+1} = x_{i}-\frac{f(x_{i})}{f^{'}(x_{i})} $$

2. Newton-Rapshon Method 구현 예제(MATLAB)

Newton-Raphson Method를 이용하여 \( f(x) = e^{-x} -3x \)의 해를 계산해보겠습니다. 초기값 \( x_{0} \)=0으로 설정하였습니다. 우선 함수의 기울기를 계산하면 다음과 같습니다.

$$ f^{'}(x) = -e^{-x}-3 $$

함수 \( f(x) \)와 함수의 기울기 \( f^{'}(x) \)를 다음과 같이 Newton-Raphson 공식에 대입합니다.

$$ x_{i+1} = x_{i}-\frac{f(x_{i})}{f^{'}(x_{i})} $$

$$ x_{i+1} = x_{i}-\frac{e^{-x_{i}}-3x_{i}}{-e^{x_{i}}-3} $$

Newton-Raphon Method 외에도 코드의 반복문 조건 설정을 위해 다음과 같이 근사치의 오차율을 계산합니다.

$$ \varepsilon = \left| \frac{x_{n+1}-x_{n}}{x_{n+1}} \right| \times 100 $$

근사치의 오차율이 작아질 수록 \( x_{n+1} \)과 \(x_{n}\)의 값이 근사하며 그 값이 해와 유사하거나 혹은 해를 도출하게 됩니다.

 

아래 코드는 예제에 대한 Newton-Raphon Method를 구현한 코드입니다.

clc; clear; close all;

i = 1;
x(1) = 0; 
tol = 9999;

while tol > 10^(-6)
  x(i+1) = x(i) - ((exp(-x(i)) - 3*x(i)) / (-exp(-x(i)) -3)); 
  tol = abs(( x(i+1) -x(i) ) / x(i+1) )*100;
  i++;
end

코드를 실행하면 총 4번의 근사를 통해 \( f(x) = e^{-x} -3x \)의 해를 계산할 수 있습니다.

 

\( i \) \( x_{i} \) \(\varepsilon\)
1 0  
2 0.25 100
3 0.25762 2.9585
4 0.25763 0.0023213
5 0.25763 1.4219e-09

3. Newton-Raphson Method 초기값 설정 문제

Newton-Raphson Method는 해의 수렴은 초기 가정값의 정확도에 의존하며 계산량에도 차이를 보이게 됩니다. 예를 들어 \( f(x) = 5x^{12}-5 \)의 근을 구해보겠습니다. 초기 가정값 \( x_{1} = 0.3 \)으로 설정하였습니다. 이때 Newton-Raphson 공식은 아래과 같습니다.

$$ x_{i+1} = x_{i} - \frac{5x_{i}^{12}-5}{60x_{i}^{11}} $$

아래의 Newton-Raphson Method 소스코드를 실행하면 130번의 연산 이후 \(x\)의 해가 1임을 알 수 있습니다.

clc; clear; close all;

i = 1;
x(1) = 1.5;
tol = 9999;

while tol > 10^(-6)
  x(i+1) = x(i) - ((5*x(i)^12) - 5) / (60*x(i)^11)
  tol(i) = abs(( x(i+1) -x(i) ) / x(i+1) )*100;
  i++;
end
\( i \) \( x_{i} \) \(\varepsilon\)
1 0.3  
2 47042 99.999
\( \vdots \) \( \vdots \) \( \vdots \)
130 1 2.8828e-06
131 1 4.4409e-13

이번에는 초기 가정값 \( x_{1} = 4 \)로 설정하고 소스코드를 실행하였습니다. 21번의 연산만에 \( x \)의 해가 1임을 확인할 수 있습니다.

 

\( i \) \( x_{i} \) \(\varepsilon\)
1 4  
2 3.6667 9.0909
\( \vdots \) \( \vdots \) \( \vdots \)
21 1 4.7357e-05
22 1 1.2335e-10

 

이러한 연산량의 차이 문제는 도함수의 기울기에서 문제를 찾을 수 있습니다. \( x_{1} = 0.3 \) 일 경우 기울기 값이 매우 낮아 접선과 x축이 만나는 점이 \(x_{2}=47042\)가 됩니다.  첫번째 근사치는 해의 수렴값에 근사하였지만 접선의 기울기로 인해 멀리 떨어진 값부터 근사하게 되어 계산량이 많아짐을 알 수 있습니다. 

Newton-Raphson Method at \(x_{1} = 0.3\)

반대로 \( x_{1} = 4 \) 인 경우 기울기의 경사도가 충분할 경우 기울기 값을 줄여나가며 값을 빠르게 찾아나가는 것을 확인할 수 있습니다.  

Newton-Raphson Method at \(x_{1} = 4\)

4. Newton-Raphson Method 정리

Newton-Raphson Method는 함수의 해를 찾기 위해 널리 사용되는 방법 중의 하나입니다. 본 포스팅에서는 Newton-Raphson Method를 유도하고 MATLAB 코드로 구현하였습니다. 또한 초기 가정값 설정에 따른 계산량의 변화를 확인하였습니다. 이를 통해 충분한 기울기를 가지고 있는 영역에서부터 초기 가정값을 설정해야한다는 것을 알 수 있었습니다. 해당 포스팅이 Netwon-Raphson Method를 공부하거나 활용하는 공학자 및 공학도에게 도움이 되길 바랍니다.