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 \)는 보다 개선된 근사치를 가지게 됩니다.
위의 그림에서 \( 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\)가 됩니다. 첫번째 근사치는 해의 수렴값에 근사하였지만 접선의 기울기로 인해 멀리 떨어진 값부터 근사하게 되어 계산량이 많아짐을 알 수 있습니다.
반대로 \( x_{1} = 4 \) 인 경우 기울기의 경사도가 충분할 경우 기울기 값을 줄여나가며 값을 빠르게 찾아나가는 것을 확인할 수 있습니다.
4. Newton-Raphson Method 정리
Newton-Raphson Method는 함수의 해를 찾기 위해 널리 사용되는 방법 중의 하나입니다. 본 포스팅에서는 Newton-Raphson Method를 유도하고 MATLAB 코드로 구현하였습니다. 또한 초기 가정값 설정에 따른 계산량의 변화를 확인하였습니다. 이를 통해 충분한 기울기를 가지고 있는 영역에서부터 초기 가정값을 설정해야한다는 것을 알 수 있었습니다. 해당 포스팅이 Netwon-Raphson Method를 공부하거나 활용하는 공학자 및 공학도에게 도움이 되길 바랍니다.
'수치해석' 카테고리의 다른 글
크래머 공식 (Crammer's Rule) - 슬기로운공돌생활 (0) | 2023.05.11 |
---|---|
테일러 급수 설명 및 MATLAB 활용 계산 (0) | 2023.05.09 |