# 수치적 불안정성의 원인

수치적 불안정성은 다양한 원인에 의해 발생할 수 있으므로, 이를 이해하기 위해서는 몇 가지 주요 요인들을 심도 있게 검토할 필요가 있다.

**1. 연산자 근사**

컴퓨터가 수치 연산을 수행할 때, 정확한 값을 표현하지 못하고 근사값을 사용해야 하는 경우가 많다. 이는 수치적 불안정성을 유발하는 주요 원인 중 하나이다.

* **반올림 오차**: 컴퓨터는 유한한 자릿수의 부동 소수점 수를 사용하여 수를 표현한다. 이때 발생하는 미세한 오차가 연산을 반복하면서 누적될 수 있다.
* **절삭 오차**: 수를 표현하는 데 필요한 자릿수가 연산 과정에서 더 많아지면, 일부 작은 자릿수를 버리게 되는데, 이는 또한 오차를 초래한다.

**2. 조건수**

조건수(Condition number)는 행렬이나 시스템의 민감도를 나타내는 지표이다. 조건수가 큰 시스템은 작은 변화에도 큰 변화가 발생하여 수치적 불안정성을 발생시킬 수 있다.

$$
\kappa = |A| \cdot |A^{-1}|
$$

여기서, $\kappa$는 조건수, $|A|$는 행렬 $A$의 노름이다.

**3. 알고리즘의 내재적 불안정성**

일부 알고리즘은 그 자체로 수치적으로 불안정할 수 있다. 예를 들어, 매우 작은 수를 매우 큰 수로 나누는 과정이 포함되어 있는 알고리즘은 수치적 불안정성을 야기할 가능성이 높다.

* **역행렬 계산**: 역행렬 계산은 특히 $A$의 조건수가 클 때 불안정할 가능성이 높다.
* **가우스 소거법**: 피벗팅을 제대로 하지 않으면 수치적으로 불안정할 수 있다.

**4. 데이터의 불량**

초기 데이터가 불량하거나, 측정 오류가 포함되어 있는 경우, 이는 시스템의 전반적인 수치적 안정성을 저해할 수 있다.

* **잡음**: 데이터에 잡음이 포함되어 있을 때, 알고리즘의 출력을 크게 왜곡할 수 있다.

**5. 부동소수점 연산의 불안정성**

부동소수점 연산은 특히 큰 수와 작은 수의 계산에서 수치적 불안정성을 유발할 수 있다.

* **정규화**: 부동소수점 연산에서 지수 부분을 정규화하는 과정에서 오차가 발생할 수 있다.

$$
x = (-1)^s \times (1.m) \times 2^e
$$

여기서 $s$는 부호 비트, $1.m$은 유효숫자, $e$는 지수이다.

**6. 상관된 변수와 직교함수**

상관된 변수가 존재하거나, 직교하지 않는 함수들을 사용할 때, 이는 계산의 불안정성을 증가시킬 수 있다.

* **다항식 적합**: 다항식의 차수가 높을수록 계산이 정밀도를 잃기 쉽다.
* **직교성 문제**: 직교하지 않는 함수나 벡터를 사용할 경우, 서로 영향을 주어 수치적 불안정성을 유발할 수 있다.
