# 뉴턴-라프슨(Newton-Raphson) 방법

#### 이론적 개요

비선형 방정식 근사는 보통 실근을 찾는 문제와 밀접하게 관련된다. 예를 들어, 실함수 $f(x)$의 근 $x^\*$을 구하는 문제를 고려하면, 수치해석에서 매우 널리 활용되는 대표적인 방법 중 하나가 뉴턴-라프슨(Newton-Raphson) 방법이다. 이는 뉴턴(Newton)의 아이디어와 라프슨(Raphson)의 후속 연구가 결합된 기법으로서, 테일러 전개(Taylor expansion)를 기반으로 한 국소적(linearization) 접근법이라고 해석할 수 있다.

비선형 스칼라 방정식 $f(x) = 0$을 풀고자 할 때, 뉴턴-라프슨 방법은 초기 추정값 $x\_0$에 대한 좋은 선택을 전제하고, 반복 과정을 통해

$$
x\_{n+1} = x\_n - \frac{f(x\_n)}{f'(x\_n)}
$$

로 수렴을 시도한다. 여기서 $f'(x\_n)$은 $f(x)$의 도함수이며, 이 값이 0에 가까워지면 분모가 매우 작아져 수렴성 문제를 야기할 수 있다. 따라서 뉴턴-라프슨 방법은 적절한 초기값 선정뿐만 아니라, 반복 과정에서 미분값이 0 근처로 가지 않도록 하는 주의가 필요하다.

연속함수 $f(x)$에 대하여 $x\_n$ 근방에서 $f'(x\_n) \neq 0$이고, 초기값이 근점(neighborhood)에 놓여 있을 때, 뉴턴-라프슨 방법은 일반적으로 2차 수렴(quadratic convergence)을 보이는 것으로 잘 알려져 있다. 이는 반복 계산에서 수렴 속도가 매우 빠르다는 장점이 있으며, 이론적으로 수렴에만 성공하면 작은 반복 횟수로도 근사해를 얻는 데 유리하다. 하지만 미분값이 매우 작아지거나, 초기값이 특이점 혹은 국소 최소점 등에 가까운 경우에는 수렴이 느려지거나 발산할 수도 있으므로 실질적인 구현에서는 다소 주의를 요한다.

#### 방법의 도출

뉴턴-라프슨 방법이 유도되는 과정을 간단히 살펴보면, $x\_n$ 부근에서 함수를 1차 테일러 전개로 근사한다. 즉,

$$
f(x) \approx f(x\_n) + f'(x\_n)(x - x\_n)
$$

로 놓고, $f(x) = 0$이 되는 근사해 $x \approx x\_{n+1}$를 구하면

$$
0 = f(x\_n) + f'(x\_n)(x\_{n+1} - x\_n)
$$

이 된다. 이를 정리하면

$$
x\_{n+1} = x\_n - \frac{f(x\_n)}{f'(x\_n)}.
$$

이는 선형화(linearization)를 이용해 비선형 항을 제거하고, 그 결과 간단한 분수 형태로 근사해를 구해내는 방식이다. 이러한 과정에서 $f'(x\_n) = 0$이면 분모가 0이 되어 정의할 수 없으므로, 뉴턴-라프슨 방법을 적용하려면 $f'(x)$가 해 근방에서 0이 아니어야 한다.

#### 수렴 해석

수렴 해석을 위해, $x^*$가 참해라 가정하고, $x^*$ 근처에서 $f'(x^*) \neq 0$이라 하면, 뉴턴-라프슨 방법의 국소 수렴(local convergence)을 다음과 같은 표준 분석으로 알 수 있다. 오차 항 $e\_n = x\_n - x^*$에 대해 테일러 전개를 수행하면

$$
f(x\_n) = f(x^*) + f'(x^*)(x\_n - x^*) + \frac{f''(\xi\_n)}{2}(x\_n - x^*)^2
$$

가 되며, $f(x^\*) = 0$이므로

$$
f(x\_n) \approx f'(x^\*)e\_n + \frac{f''(\xi\_n)}{2}e\_n^2
$$

이다. 뉴턴-라프슨 점화식을 쓰면

$$
x\_{n+1} - x^\* = x\_n - x^\* - \frac{f(x\_n)}{f'(x\_n)}.
$$

이를 $e\_{n+1} = e\_n - \frac{f(x\_n)}{f'(x\_n)}$로 쓰고, $f'(x\_n)$을 $f'(x^\*) + \dots$로 확장하여 적절히 묶으면,

$$
e\_{n+1} \approx -\frac{f'(x^*)e\_n + \frac{f''(\xi\_n)}{2}e\_n^2}{f'(x^*) + \dots}
$$

의 형태를 얻게 된다. 최종적으로 항을 정리하면 $e\_{n+1}$은 $e\_n^2$에 비례하는 항이 지배적이 되는 구조임을 보이게 된다. 따라서 근점에 놓여 있고 $f'(x^\*)$가 0이 아닌 경우, $|e\_{n+1}|$은 $|e\_n|^2$ 정도의 속도로 줄어드는 2차 수렴(quadratic convergence)을 기대할 수 있다. 이것이 뉴턴-라프슨 방법이 가지는 높은 수렴 속도의 핵심적인 이론적 근거이다.

#### 구현과 주의사항

뉴턴-라프슨 방법의 실제 구현 시 고려해야 할 점은 다음과 같다. 먼저, $f'(x)$를 정확하게 계산하거나 근사하기 위한 과정이 필요하다. $f'(x)$를 별도로 해석학적으로 구해낼 수 있으면 가장 좋겠지만, 그렇지 않은 경우에는 수치 미분 방식을 사용할 수 있다. 수치 미분은

$$
f'(x) \approx \frac{f(x + h) - f(x)}{h}
$$

등의 근사 기법을 쓴다. 그러나 $h$의 선택이 어렵고, 연산 오차나 함수 평가 횟수 증가 등도 고려해야 한다.

또한 뉴턴-라프슨 방법은 빠른 수렴성을 갖지만, 초기값이 좋지 않으면 발산하거나 근점이 아닌 다른 근사해로 치우칠 수 있다. 예컨대 $f'(x\_n) = 0$에 가까운 점에서 분모가 매우 작아지면 업데이트 폭이 지나치게 커져서 해석적으로 문제를 일으킬 수 있다. 이처럼 파라미터 선택, 적절한 감속(damping) 기법 도입, 재시도 전략(backtracking) 등 다양한 개선책이 고려될 수 있다.

이해를 돕기 위해 이후 예시 및 실제 구현 코드를 조금 살펴볼 것이다. 간단한 1차원 예시부터 실제 응용 문제가 있을 수 있으며, 여러 해를 갖는 비선형 문제에서 해를 분리하는 기술도 중요하다. 이후에는 고차원(벡터) 문제에 대한 뉴턴 방법 확장으로서, 야코비 행렬(Jacobian matrix)과 헤시안(Hessian matrix)을 활용하는 논의도 진행할 수 있다.

#### 고차원(벡터) 확장

뉴턴-라프슨 방법은 단일 변수(real-valued function in one variable) 문제에 국한되지 않는다. 보다 일반적인 다변수 비선형 방정식 계를 다룰 때에도 동일한 아이디어를 확장하여 적용할 수 있다. 예를 들어 $\mathbf{x} \in \mathbb{R}^n$인 벡터 변수에 대해, 비선형 연립 방정식

$$
\mathbf{F}(\mathbf{x}) =  \begin{bmatrix} F\_1(\mathbf{x}) \ F\_2(\mathbf{x}) \ \vdots \ F\_n(\mathbf{x}) \end{bmatrix} = \mathbf{0}
$$

를 풀고자 할 때, 뉴턴-라프슨 방법은 야코비(Jacobian) 행렬 $\mathbf{J}(\mathbf{x})$를 이용해 점화식을 정의한다. 야코비 행렬은 각 방정식을 각 변수에 대해 편미분한 성분으로 구성된 정방 행렬이며,

$$
\mathbf{J}(\mathbf{x}) = \begin{bmatrix} \frac{\partial F\_1}{\partial x\_1} & \frac{\partial F\_1}{\partial x\_2} & \dots & \frac{\partial F\_1}{\partial x\_n} \ \frac{\partial F\_2}{\partial x\_1} & \frac{\partial F\_2}{\partial x\_2} & \dots & \frac{\partial F\_2}{\partial x\_n} \ \vdots & \vdots & \ddots & \vdots \ \frac{\partial F\_n}{\partial x\_1} & \frac{\partial F\_n}{\partial x\_2} & \dots & \frac{\partial F\_n}{\partial x\_n} \end{bmatrix}.
$$

따라서 초기 추정치 $\mathbf{x}\_0$를 설정하고, 반복 과정을

$$
\mathbf{x}\_{n+1} = \mathbf{x}\_n - \mathbf{J}(\mathbf{x}\_n)^{-1} \mathbf{F}(\mathbf{x}\_n)
$$

로 진행한다. 여기서 $\mathbf{J}(\mathbf{x}\_n)$이 역행렬이 존재하지 않거나 매우 작은 행렬식(determinant)을 갖게 되면, 스칼라 문제에서 $f'(x\_n)$이 0이 되어 분모가 사라지는 상황과 동일하게 수치적 불안정이 발생할 수 있다. 따라서 근접 근방에서 $\mathbf{J}(\mathbf{x}^\*)$가 가역(invertible)이어야 한다는 조건이 중요하다.

점화식은 기본적으로 모든 편미분 정보를 한 번에 활용하므로, 다변수 문제에서 해가 잘 정의되어 있다면 비교적 빠른 수렴을 얻을 수 있다. 하지만 연립 방정식의 규모가 커지면 야코비 행렬을 구성하고 역행렬 혹은 선형계 풀이를 수행하는 데 계산 비용이 상당히 커질 수 있다. 구체적으로 $n \times n$ 행렬의 역행렬을 직접 구하거나, $\mathbf{J}(\mathbf{x}\_n)\mathbf{p} = \mathbf{F}(\mathbf{x}\_n)$ 형태의 선형계를 푸는 연산이 반복마다 수행되므로, $O(n^3)$ 정도의 계산량이 발생할 수 있다.

#### 감속 기법(damping)과 변형 뉴턴법

단일 변수 및 고차원 문제 모두에서, 뉴턴-라프슨 공식

$$
\mathbf{x}\_{n+1} = \mathbf{x}\_n - \mathbf{J}(\mathbf{x}\_n)^{-1}\mathbf{F}(\mathbf{x}\_n)
$$

가 지나치게 큰 업데이트를 일으키거나, 발산을 유발할 위험이 있을 때, 다음과 같은 감속 기법을 고려할 수 있다.

$$
\mathbf{x}\_{n+1} = \mathbf{x}\_n - \alpha\_n , \mathbf{J}(\mathbf{x}\_n)^{-1}\mathbf{F}(\mathbf{x}\_n),
$$

여기서 $\alpha\_n$은 적절히 선택된 스칼라 계수로서, $0 < \alpha\_n \le 1$ 범위에서 적당한 값을 정한다. 예컨대 선형 검색(line search)을 통해 함숫값을 감소시키는 방향과 크기를 탐색하여 $\alpha\_n$을 골라서, 발산 위험을 줄이고 더 안정적인 수렴을 유도하는 방법이 대표적이다.

또 다른 접근으로, $\mathbf{J}(\mathbf{x}\_n)$ 대신 근사 행렬을 사용해 반복을 진행하는 방법도 있다. 이를 준뉴턴(quasi-Newton) 혹은 Broyden 계열 기법이라 부르기도 한다. 이 방식은 야코비나 헤시안 행렬을 직접 구하기 어려울 때 유용하며, 반복 과정을 통해 행렬 근사를 업데이트하면서 점진적으로 근사 품질을 높여간다.

#### 구현 예시 (Python)

아래 예시는 단일 변수 뉴턴-라프슨 예시 코드로, Python을 활용하여 근을 구하는 과정을 간략히 보여줄 수 있다. 수치미분 기법을 사용하거나, 혹은 symbolic library 등을 통해 도함수를 직접 얻을 수도 있다.

```python
import sympy

# 변수와 함수 정의
x = sympy.Symbol('x', real=True)
f_expr = x**3 - 2*x - 5  # 예시 함수 f(x) = x^3 - 2x - 5
df_expr = f_expr.diff(x) # 도함수

# 심볼릭 표현 -> 수치 함수로 변환
f = sympy.lambdify(x, f_expr, 'numpy')
df = sympy.lambdify(x, df_expr, 'numpy')

# 초기값, 허용오차, 반복 제한 설정
x0 = 2.0
tol = 1e-10
max_iter = 100

# 뉴턴-라프슨 반복
for i in range(max_iter):
    fx = f(x0)
    dfx = df(x0)
    if abs(dfx) < 1e-14:
        print("미분값이 0에 너무 가까워 중단")
        break
    x1 = x0 - fx/dfx
    if abs(x1 - x0) < tol:
        x0 = x1
        break
    x0 = x1

print("근approx =", x0)
```

해당 예시는 $f(x)=x^3 - 2x - 5=0$의 근을 찾는다. 반복 과정에서 $f'(x\_0)$가 0에 근접하지 않고, 적절히 초깃값을 두면 빠른 속도로 수렴한다. 예를 들어 $x\_0 = 2$로 시작할 때, 보통 5\~6번 이내로 굉장히 작은 오차에 도달할 수 있다.

#### 여러 근의 존재와 초기값 문제

비선형 방정식은 하나의 해만 갖는 것이 아니라, 여러 해를 갖는 경우가 흔하다. 예를 들어 $f(x)=\sin(x)$처럼 주기가 있는 경우 무수히 많은 근이 존재한다. 뉴턴-라프슨 방법은 기본적으로 초기값을 어디에 두느냐에 따라 서로 다른 해로 수렴할 수 있다. 발산해 버리거나, 국소해(local root)를 찾거나, 전혀 의도하지 않은 해를 찾게 되기도 한다. 따라서 수렴 판정과 초기값 설정이 매우 중요한 이슈가 된다.

다변수 경우에도 마찬가지로, 초기 추정치에 따라 전혀 다른 해(다른 branch)로 떨어질 수 있다. 만약 특정 해를 의도적으로 찾으려면, 물리적 혹은 기하학적 근거를 통해 초기값을 설정하는 것이 안전하다. 아니면 여러 후보점을 두어 병렬적으로 실행한 후, 각 후보점이 어떤 해로 수렴하는지 확인하는 전략을 쓸 수도 있다.

#### 공학 응용과 추가 논의

뉴턴-라프슨 방법은 매우 일반적인 구조로 인해 널리 활용된다. 예컨대, 고차 방정식의 해 분석, 네트워크 플로우 문제, 전자회로 해석, 유한요소법(FEM) 등에서 선형화 절차가 필수적인 상황에 자주 등장한다. 실제로 소프트웨어 상에서도 반복적으로 야코비(또는 헤시안)를 구성하고 해를 업데이트하는 과정을 여러 번 돌려서 해석을 마무리한다.

초급 단계에서는 스칼라 문제를 중심으로 원리를 파악하고, 중급 이상에서는 매트릭스 연산과 더불어 감속 기법, 준뉴턴 방법, 혹은 부분공간(subspace) 보강 접근 등 다양한 변형 기법을 접하게 될 것이다. 이런 내용은 뒤이어 나오는 비선형 연립방정식, 혹은 최적화 문제 해법과도 자연스럽게 연결된다.

#### 변형 기법과 확장 논의

뉴턴-라프슨 방법은 매우 강력하고 중요한 알고리즘이지만, 문제 상황이나 함수 특성에 따라 적절히 변형하거나 보완하는 전략이 종종 활용된다. 예를 들어, 다변수 혹은 대규모 문제에서 야코비를 구성하고 직접 역행렬을 구하는 비용이 지나치게 클 경우, 특정 사전조건화 기법(preconditioning)이나 반복적 선형 해법(예: GMRES, Conjugate Gradient 등)을 결합하여 계산 효율을 높이는 접근이 있다. 이를 흔히 뉴턴-크릴로프(Newton-Krylov) 기법이라 부른다.

해당 기법은 고차원 시스템의

$$
\mathbf{F}(\mathbf{x}) = \mathbf{0}
$$

해를 구하기 위해, 매 반복에서

$$
\mathbf{J}(\mathbf{x}\_n),\delta \mathbf{x}\_n = -\mathbf{F}(\mathbf{x}\_n)
$$

형태의 선형 문제를 풀어야 한다. 하지만 $\mathbf{J}(\mathbf{x}\_n)$을 직접 구성하지 않고, $\mathbf{J}(\mathbf{x}\_n),\mathbf{v}$ 형태의 곱만을 효율적으로 계산하는 함수를 정의한 뒤(이를 "함수-곱(Function-Product)" 접근이라 한다), 선형계 해법을 반복적(Iterative)으로 해결하는 방식이 뉴턴-크릴로프 방법의 골자다. 이때 다소의 근사 오차가 발생해도, 외부의 뉴턴 반복을 통해 어느 정도 보정이 이뤄진다.

또한, 감속(damping) 전략이나 선형 검색(line search)을 통합할 수도 있다. 즉, 스텝 길이가 과도해서 발산 위험이 높을 때,

$$
\mathbf{x}\_{n+1} = \mathbf{x}\_n + \alpha\_n ,\delta \mathbf{x}\_n,
$$

처럼 구하고 적절한 $\alpha\_n \in (0,1]$ 값을 조정하며 신중하게 전진한다. 이는 최적화(Optimization) 문제에서의 스텝 조절과 유사한 개념으로, 해석 불가능 지점이나 발산 영역을 피하며 원활한 수렴을 이끌어내는 역할을 한다.

비슷하게, 기능 형태가 급격하게 변화하거나 미분이 매우 작은 구간이 존재하는 등의 불안정 요소가 있을 때에는 고전적인 뉴턴-라프슨을 바로 적용하기보다는, 사전에 문제 영역을 분석하고, 구간별 또는 영역별로 적절한 방법(예: 이분법이나 초깃값 탐색 기법 등)과 혼합해서 쓰는 경우가 많다. 예컨대 1차원 문제에서 극단적으로 급격한 변화나 특이점 근처를 넘어야 한다면, 이분법으로 초깃값을 좁힌 뒤 뉴턴-라프슨으로 전환하기도 한다.

#### 세컨트(Secant)와 할리(Halley) 기법

뉴턴-라프슨이 미분값을 요구한다면, 세컨트(Secant) 방법은 두 점에서의 함수값을 통해 미분값을 근사하는 식으로 업데이트한다. 즉,

$$
f'(x\_n) \approx \frac{f(x\_n) - f(x\_{n-1})}{x\_n - x\_{n-1}},
$$

이렇게 추정한 기울기를 사용하여

$$
x\_{n+1} = x\_n - \frac{f(x\_n)}{\frac{f(x\_n) - f(x\_{n-1})}{x\_n - x\_{n-1}}}.
$$

를 수행한다. 뉴턴법과 달리 $f'(x)$가 명시적으로 필요 없으므로, 기호 미분(sympy 등의 symbolic tool)이나 수치 미분을 피하고도 근을 구할 수 있다는 장점이 있다. 다만 수렴 차수가 2차보다 낮아(약 1.618차) 뉴턴-라프슨보다는 느린 편이다.

할리(Halley) 방법은 2차 미분까지 고려하는 방식으로, 1차 미분뿐 아니라 2차 미분(또는 그에 상응하는 정보를 일부)도 활용한다. 1차 및 2차 테일러 전개를 보다 풍부하게 써서 근을 추적하므로, 특정 상황에서 뉴턴-라프슨보다 더 빠른 수렴 특성을 보일 수 있다. 다만 2차 미분을 구하기 어려운 실전 문제에서 오히려 계산부담이 커질 수 있다.

#### 다항식에 대한 뉴턴-라프슨 적용과 복소해

다항식의 근을 찾는 문제는 전통적으로 뉴턴-라프슨 방법이 많이 언급되는 대표 사례다. 예를 들어, $p(z) = z^3 - 1 = 0$ 같은 복소 해를 갖는 다항식에서, 뉴턴-라프슨을 복소 영역으로 확장하여

$$
z\_{n+1} = z\_n - \frac{p(z\_n)}{p'(z\_n)}
$$

를 계산할 수 있다. 이때 $p'(z\_n) = 3z\_n^2$와 같은 복소 도함수를 적용하게 된다. 복소수에 대해 뉴턴 반복을 시각화하면, 초기값에 따라 전혀 다른 해로 수렴하는 영역 분리가 나타나는데, 이를 뉴턴 프랙탈(Newton fractal)이라 부른다.

복소 평면에서의 뉴턴 반복은 해에 수렴하는 포인트 집합이 매우 정교한 분할 구조를 보이므로, 응용보다는 시각적·이론적 흥미로 종종 소개된다. 하지만 실제로 전자회로나 편미분 방정식에서의 복소해 분석에 응용될 수도 있다.

#### 추가 구현 예시 (C++)

다음은 C++ 예시 코드로, 기본적인 1차원 뉴턴-라프슨 방법을 구현한 예다. 여기서는 미분값을 직접 코드로 작성한다. 예시 함수로 $f(x)=\exp(x)-3x$를 두었다.

```cpp
#include <iostream>
#include <cmath>
#include <limits>

double f(double x) {
    return std::exp(x) - 3.0 * x;
}

double df(double x) {
    return std::exp(x) - 3.0;
}

int main() {
    double x0 = 1.0;          // 초기 추정값
    double tol = 1e-12;       // 허용 오차
    int max_iter = 100;       // 최대 반복 횟수
    
    for(int i=0; i<max_iter; ++i) {
        double fx = f(x0);
        double dfx = df(x0);
        
        if(std::fabs(dfx) < std::numeric_limits<double>::epsilon()) {
            std::cout << "미분값이 거의 0, 반복 중단." << std::endl;
            break;
        }
        
        double x1 = x0 - fx/dfx;
        
        if(std::fabs(x1 - x0) < tol) {
            x0 = x1;
            break;
        }
        
        x0 = x1;
    }
    
    std::cout << "근 approx = " << x0 << std::endl;
    return 0;
}
```

이 코드는 $\exp(x)-3x=0$ 문제에 대해, 초기값 $x\_0=1.0$ 부근에서 해를 찾는다. 실제로 근은 대략 $x \approx 1.0986122886689$ 수준이며, 반복이 빠르게 수렴한다. 최대 반복 횟수 이내에 원하는 정밀도에 도달하면 반복을 종료한다.

만약 $df(x\_0)$가 거의 0인 지점(예: $x \approx \ln(3)$)에서 시도한다면, 분모가 작아져서 발산할 가능성이 있다. 따라서 위와 같이 미분값이 너무 작으면 중단하거나 다른 대안을 모색하도록 하는 안전장치가 필요하다.

#### 활용과 고려 사항

뉴턴-라프슨 방법은 단순 명료한 점화식에도 불구하고, 실제로는 함수 형태나 문제 스케일, 초기값, 미분 계산 정확도 등에 따라 성능이 크게 달라진다. 오차 허용 범위와 반복 제한, 함수 평가 비용, 해의 멀티플리시티(multiplicity) 등도 중요하게 고려해야 한다. 멀티플 근(예: $f(x)=(x-1)^2$ 형태 등) 근방에서는 수렴 차수가 떨어지는 현상이 잘 알려져 있다. 왜냐하면 $f'(x^\*)=0$이 되므로 분모가 0에 가까워지는 위험이 있기 때문이다.

이럴 때는 변형 뉴턴(Modified Newton) 방법을 적용해, 분모에 $f'(x)^2$ 같은 추가 항을 곱하거나, 세컨트 기법 등과 혼합하는 식으로 개선하기도 한다. 또한, 실질적 구현에서는 해가 없을 가능성이나 복수 개의 해가 존재하는 상황도 열어두고, 해가 존재하지 않거나 발산하는 경우에 대해 적절히 처리를 해야 한다.

#### 복수근(multiple roots)과 특이 케이스

스칼라 함수 $f(x)$에 대해 참해 $x^\*$가 다중근(multiple root)이 되는 상황을 고려해보자. 예컨대 $f(x)=(x-1)^2$처럼 $x=1$이 2차 근인 경우, 뉴턴-라프슨 점화식에서

$$
f'(x) = 2(x-1),
$$

이므로 $x=1$에서는 $f'(1)=0$이다. 이는 곧 분모가 0이 되거나 근방에서 매우 작아져, 뉴턴법의 수렴 특성이 상당히 저하될 수 있음을 의미한다. 실험적으로도 초기 추정값을 $x\_0$이라 두고

$$
x\_{n+1} = x\_n - \frac{(x\_n-1)^2}{2(x\_n-1)} = x\_n - \frac{x\_n-1}{2} = \frac{x\_n+1}{2},
$$

을 얻게 된다. 이는 결국 이분법(Bisection)과 비슷한 선형 수렴 속도를 보여서, 고유의 2차 수렴 이점이 상실된다.

이런 다중근 문제에서는 변형 뉴턴(Modified Newton) 기법을 사용해

$$
x\_{n+1} = x\_n - \frac{f(x\_n)}{f'(x\_n)} \cdot \frac{1}{m},
$$

의 꼴로, 근의 차수 $m$을 고려하여 분모에 추가 보정을 가함으로써 2차 수렴을 어느 정도 회복할 수도 있다. 하지만 실제로 $m$의 값을 사전에 정확히 알기 어려운 경우가 많으며, $f'(x^\*)=0$에 근접하는 영역에서는 여전히 불안정한 업데이트가 발생할 수 있으므로 주의해야 한다.

#### 불안정성 개선: 사전 검색(prescanning)과 구간 분할

1차원 문제의 경우, 여러 해가 있거나 특이점 근처를 피해 초기값을 설정해야 한다면, 사전에 함수의 부호 변화를 조사하는 간단한 과정을 둘 수 있다. 예컨대 적절한 구간 $\[a, b]$를 잡고, 소구간들을 순회하며 $f(x)$ 부호가 바뀌는 지점을 찾아내어, 그 구간 안에서 뉴턴-라프슨 방법을 시작한다. 이 방식은 이분법과 뉴턴법을 혼합하여 안정성과 수렴 속도를 동시에 어느 정도 확보할 수 있게 한다.

예시로 $f(x)=\cos(x)-x$ 같은 방정식을 생각하면, 여러 구간에서 서로 다른 근들이 발생할 수 있다. 이를 빠르게 찾으려면, 먼저 특정 구간을 탐색해 부호 변화를 감지하고, 해당 구간에 대해 뉴턴-라프슨 또는 이분법 등의 방법을 적용함으로써, 발산 없이 손쉽게 근에 도달할 수 있다.

#### 비선형 최적화와의 연계

뉴턴-라프슨 방법은 $f(x)=0$ 문제에 활용되지만, 비선형 최적화 문제를 풀 때 역시 핵심 알고리즘으로 등장한다. 예를 들어,

$$
\min\_x , g(x)
$$

문제를 고려하면, 정상점(stationary point)을 만족하는 조건은

$$
g'(x) = 0
$$

가 된다. 즉, 최적화에서의 미분=0 조건을 $f(x)=g'(x)$라는 함수로 정의하면, 이를 0으로 만드는 해를 찾는 문제로 전환할 수 있다. 이 과정을 1차원 케이스로 단순화하면, 뉴턴 점화식은

$$
x\_{n+1} = x\_n - \frac{g'(x\_n)}{g''(x\_n)}
$$

형태가 된다. 이때 $g''(x\_n) > 0$이면 국소 최소점, $g''(x\_n) < 0$이면 국소 최대점 가능성이 있음을 암시한다.

고차원 최적화에서도, 뉴턴 방법은 헤시안(Hessian) 행렬을 직접 사용해 빠르게 해를 추적한다. 다만 헤시안 계산이 어려운 대규모 문제에서는 준뉴턴(quasi-Newton) 계열 기법(예: BFGS, L-BFGS 등)이 실용적 대안으로 등장한다.

#### 도함수 불연속 및 유리함수 문제

만약 $f(x)$가 구간별로 불연속이거나, 미분이 불연속/급변하는 구간이 존재한다면, 테일러 전개에 기반한 뉴턴-라프슨의 가정이 크게 무너질 수 있다. 예를 들어 분수형태의 유리함수(rational function)에서 분모가 0이 되는 근방에서는 작은 오차가 크게 증폭되어 수렴이 어려울 수 있다. 실제로 $f(x)=\frac{1}{x}-2$ 같은 단순한 예라도 $x=0$ 근처에서 특이점(singularity)이 형성되어 발산 위험이 생긴다.

이런 경우에는 로컬 근 접근 전에, 큰 스케일의 특이점 구조나 불연속 지점들을 미리 파악하고, 문제가 생기지 않는 구간으로 초기값을 설정하거나, 혹은 다른 안정화 기법을 도입해야 한다. 예를 들어, 사전 필터링을 통해 근 위치 범위를 좁히고, 해당 범위 내에서는 분모가 소멸하지 않는지 확인하는 식이다.

#### 해석적 도함수와 수치미분

뉴턴-라프슨은 정확한 도함수 정보를 이용할 때 가장 이상적인 성능을 낸다. 하지만 대부분의 실전 문제에서는 도함수를 해석적으로 얻기 쉽지 않거나, 수많은 항이 복잡하게 얽혀 있을 수 있다. 이때 수치 미분(numerical differentiation)으로 대체할 수 있지만, 작은 $h$ 선택, 반올림 오차, 함수 호출 횟수 증가 등이 단점으로 작용한다.

특히 고차원 문제에서 편미분들을 모두 수치적으로 구하는 것은 비용이 매우 크다. $n$차원에서 전부 다 구하면 최소 $n+1$번 이상의 함수 평가가 필요하고, 그것도 2차 미분(헤시안)까지 구하려면 더 큰 부하가 발생한다. 이런 점 때문에 준뉴턴 기법이 실제 해석도구로 널리 쓰이고, 자동미분(automatic differentiation) 도입이 연구되고 있다.

자동미분 기법은 소스코드 레벨에서 미분 연산을 추적해, 해석학적 미분과 유사한 정확도를 얻으면서도 사람이 일일이 편미분식을 유도하지 않아도 되도록 지원한다. 이 역시 규모가 매우 큰 문제에서는 비용이 만만치 않으나, 일반적인 수치 미분보다 효율적이고 안정적인 해를 제공하는 경우가 많다.

\---을 대신하여

뉴턴-라프슨(Newton-Raphson) 방법은 전통적이고 강력한 근사 기법으로, 이 책의 다른 장(예: 비선형 연립방정식, 최적화, 보간, 적분 방정식 해법 등)과도 유기적으로 연결된다. 단순한 점화식으로 스칼라 함수의 해를 구하는 것에서 출발하여, 고차원 연립 방정식, 비선형 최적화, 그리고 다양한 변형 기법으로 확장되는 광범위한 활용 스펙트럼을 지닌다.

계산 효율이나 수렴 안정성을 높이기 위해서는, 초기값 선정, 감속(damping) 여부, 야코비(또는 헤시안)의 정확도와 비용, 특이점 처리, 다중근 특성 파악 등 여러 측면을 신중하게 다룰 필요가 있다. 이후 이 책의 관련 장들에서, 다른 비선형 방정식 해법과 비교·조합하는 과정을 통해, 보다 폭넓고 실용적인 관점에서 뉴턴-라프슨 방법을 활용할 수 있을 것이다.
