수치적 불안정성은 다양한 원인에 의해 발생할 수 있으므로, 이를 이해하기 위해서는 몇 가지 주요 요인들을 심도 있게 검토할 필요가 있다.
1. 연산자 근사
컴퓨터가 수치 연산을 수행할 때, 정확한 값을 표현하지 못하고 근사값을 사용해야 하는 경우가 많다. 이는 수치적 불안정성을 유발하는 주요 원인 중 하나이다.
-
반올림 오차: 컴퓨터는 유한한 자릿수의 부동 소수점 수를 사용하여 수를 표현한다. 이때 발생하는 미세한 오차가 연산을 반복하면서 누적될 수 있다.
-
절삭 오차: 수를 표현하는 데 필요한 자릿수가 연산 과정에서 더 많아지면, 일부 작은 자릿수를 버리게 되는데, 이는 또한 오차를 초래한다.
2. 조건수
조건수(Condition number)는 행렬이나 시스템의 민감도를 나타내는 지표이다. 조건수가 큰 시스템은 작은 변화에도 큰 변화가 발생하여 수치적 불안정성을 발생시킬 수 있다.
여기서, \kappa는 조건수, \|A\|는 행렬 A의 노름이다.
3. 알고리즘의 내재적 불안정성
일부 알고리즘은 그 자체로 수치적으로 불안정할 수 있다. 예를 들어, 매우 작은 수를 매우 큰 수로 나누는 과정이 포함되어 있는 알고리즘은 수치적 불안정성을 야기할 가능성이 높다.
-
역행렬 계산: 역행렬 계산은 특히 A의 조건수가 클 때 불안정할 가능성이 높다.
-
가우스 소거법: 피벗팅을 제대로 하지 않으면 수치적으로 불안정할 수 있다.
4. 데이터의 불량
초기 데이터가 불량하거나, 측정 오류가 포함되어 있는 경우, 이는 시스템의 전반적인 수치적 안정성을 저해할 수 있다.
- 잡음: 데이터에 잡음이 포함되어 있을 때, 알고리즘의 출력을 크게 왜곡할 수 있다.
5. 부동소수점 연산의 불안정성
부동소수점 연산은 특히 큰 수와 작은 수의 계산에서 수치적 불안정성을 유발할 수 있다.
- 정규화: 부동소수점 연산에서 지수 부분을 정규화하는 과정에서 오차가 발생할 수 있다.
여기서 s는 부호 비트, 1.m은 유효숫자, e는 지수이다.
6. 상관된 변수와 직교함수
상관된 변수가 존재하거나, 직교하지 않는 함수들을 사용할 때, 이는 계산의 불안정성을 증가시킬 수 있다.
-
다항식 적합: 다항식의 차수가 높을수록 계산이 정밀도를 잃기 쉽다.
-
직교성 문제: 직교하지 않는 함수나 벡터를 사용할 경우, 서로 영향을 주어 수치적 불안정성을 유발할 수 있다.