수치해석 (Numerical Analysis)

수치해석은 수학 문제의 근사적인 수치 해법을 연구하는 분야입니다. 해석적으로 풀기 어렵거나 불가능한 문제를 컴퓨터를 이용하여 근사적으로 풀 수 있습니다. 이 분야는 공학, 과학, 금융 등 실질적으로 모든 응용 수학 분야의 기반이 됩니다.

수치해석이란 무엇입니까?

한마디로, 컴퓨터로 수학 문제를 푸는 방법을 연구하는 학문입니다. 수학에는 정확한 답을 구할 수 있는 문제도 있지만, 대부분의 실제 문제는 손으로 정확하게 풀기 어렵거나 불가능합니다. 예를 들어 $x = \cos(x)$를 만족하는 $x$를 구하려면 어떻게 해야 합니까? 대수적으로는 풀 수 없지만, 컴퓨터를 이용하면 원하는 정밀도까지 근사적인 답을 구할 수 있습니다.

수치해석은 이러한 "근사적 풀이"를 얼마나 정확하게, 얼마나 빠르게, 얼마나 안정적으로 수행할 수 있는지를 체계적으로 다루는 분야입니다.

일상 비유 — 수치해석은 "측량사의 기술"과 같습니다.

산 높이를 재려면 정확히 꼭대기까지 올라가는 방법(해석적 풀이)이 가장 정확하지만, 현실적으로 어려울 수 있습니다. 대신 멀리서 각도를 재고 삼각법으로 계산하면(수치적 풀이) 충분히 정확한 결과를 훨씬 빨리 얻을 수 있습니다. 수치해석은 이렇게 "정확한 답 대신 충분히 좋은 답"을 효율적으로 구하는 방법을 연구합니다.

이런 곳에 쓰여요

  • 일기예보: 대기 방정식을 수치적으로 풀어서 내일 날씨를 예측
  • 영화 CG: 물, 불, 연기 시뮬레이션을 수치 적분으로 렌더링
  • 비행기 설계: 풍동 실험 대신 컴퓨터로 공기역학 시뮬레이션(CFD)
  • 주식 가격: 블랙-숄즈 방정식을 수치적으로 풀어 옵션 가격 계산

선수 지식: 미적분학, 선형대수학

난이도: ★★★★☆ (대학교)

부동소수점 표현

컴퓨터는 실수를 유한한 비트로 표현하기 때문에, 모든 실수를 정확하게 나타낼 수 없습니다. 이 한계가 수치 계산의 근본적인 오차 원인이 됩니다.

왜 컴퓨터는 정확하지 않습니까?

일상에서 $\frac{1}{3} = 0.333\ldots$을 소수로 쓰면 끝없이 계속됩니다. 하지만 종이에는 유한한 자릿수만 쓸 수 있으므로 $0.333$처럼 끊어야 합니다. 컴퓨터도 마찬가지입니다. 유한한 비트(0과 1)로 실수를 표현해야 하므로, 대부분의 실수는 "반올림"되어 저장됩니다. $0.1 + 0.2$가 컴퓨터에서 정확히 $0.3$이 아닌 $0.30000000000000004$가 되는 이유가 바로 이것입니다.

IEEE 754 표준

IEEE 754는 부동소수점 수의 표현과 연산을 정의하는 국제 표준입니다. 부동소수점 수는 다음과 같이 표현됩니다.

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

여기서 $s$는 부호 비트, $m$은 가수(mantissa/significand), $e$는 지수(exponent)입니다.

형식부호지수가수전체 비트유효 십진 자릿수
단정밀도 (float)1비트8비트23비트32비트약 7자리
배정밀도 (double)1비트11비트52비트64비트약 15~16자리

기계 엡실론 (Machine Epsilon)

기계 엡실론 $\epsilon_{\text{mach}}$은 $1 + \epsilon > 1$을 만족하는 가장 작은 부동소수점 수입니다. 이는 부동소수점 산술의 상대 정밀도를 나타냅니다.

$$\epsilon_{\text{mach}} = 2^{-(t-1)}$$

여기서 $t$는 가수 비트 수(숨겨진 비트 포함)입니다.

형식기계 엡실론
단정밀도$\epsilon_{\text{mach}} = 2^{-23} \approx 1.19 \times 10^{-7}$
배정밀도$\epsilon_{\text{mach}} = 2^{-52} \approx 2.22 \times 10^{-16}$

임의의 실수 $x$를 부동소수점 수 $\text{fl}(x)$로 표현할 때, 반올림에 의한 상대 오차는 다음을 만족합니다.

$$\left|\frac{\text{fl}(x) - x}{x}\right| \leq \frac{\epsilon_{\text{mach}}}{2}$$

유효숫자 (Significant Digits)

근사값 $\hat{x}$가 참값 $x$에 대해 $t$자리 유효숫자를 갖는다는 것은 다음을 의미합니다.

$$\frac{|x - \hat{x}|}{|x|} \leq 5 \times 10^{-t}$$
소거 오차 (Cancellation Error): 크기가 비슷한 두 수의 뺄셈에서 유효숫자가 급격히 소실됩니다. 예를 들어, $x = 1.23456789$와 $y = 1.23456780$의 차이 $x - y = 0.00000009$에서 원래 9자리 유효숫자가 1자리로 줄어듭니다. 수치 알고리즘 설계 시 이러한 뺄셈을 피하도록 수식을 재구성하는 것이 중요합니다.
예시 — 이차방정식의 소거 오차 방지: $ax^2 + bx + c = 0$의 근을 구할 때, $b^2 \gg 4ac$이면 근의 공식에서 소거 오차가 발생합니다. 이를 피하려면 먼저 절대값이 큰 근 $x_1 = \frac{-b - \text{sgn}(b)\sqrt{b^2 - 4ac}}{2a}$를 구하고, 다른 근은 $x_2 = \frac{c}{ax_1}$ (비에타 공식)로 계산합니다.

오차 분석

일상 비유 — 오차란 무엇입니까?

체중계에 올라갔을 때 67.3kg이 나왔다고 합시다. 실제 체중이 정확히 67.0kg이라면, 0.3kg만큼의 오차가 있는 것입니다. 수치해석에서도 마찬가지로, 컴퓨터가 계산한 "근사값"과 "참값" 사이에는 항상 차이(오차)가 존재합니다. 중요한 것은 오차를 없애는 것이 아니라, 오차를 이해하고 허용 범위 안으로 제어하는 것입니다.

오차의 종류

종류설명예시
반올림 오차 (Round-off Error)유한 자릿수 표현에 의한 오차$\frac{1}{3} = 0.333\ldots$을 유한 소수로 표현
절단 오차 (Truncation Error)무한 과정을 유한으로 잘라서 생기는 오차테일러 급수를 유한 항까지만 사용
측정 오차 (Data Error)입력 데이터의 부정확성실험 측정값의 불확실성

절대오차와 상대오차

참값 $x$에 대한 근사값 $\hat{x}$의 오차를 두 가지로 측정합니다.

단계별 예시 — 절대오차와 상대오차의 차이:

상황 1: 서울에서 부산까지의 실제 거리가 400km인데, 네비게이션이 399km라고 표시합니다.

  • 절대 오차: $|400 - 399| = 1$km
  • 상대 오차: $\frac{1}{400} = 0.0025 = 0.25\%$
  • 해석: 1km 오차는 400km에 비하면 무시할 수 있습니다.

상황 2: 나사의 길이가 실제로 2mm인데, 측정기가 1mm라고 표시합니다.

  • 절대 오차: $|2 - 1| = 1$mm
  • 상대 오차: $\frac{1}{2} = 0.5 = 50\%$
  • 해석: 절대 오차는 1mm로 작아 보이지만, 참값에 비하면 50%나 벗어나 있어 심각한 오차입니다.

이처럼 같은 크기의 절대 오차라도 참값에 따라 의미가 달라집니다. 따라서 상대 오차가 더 의미 있는 척도인 경우가 많습니다.

전방 오차와 후방 오차

문제를 함수 $f$로, 알고리즘의 계산 결과를 $\hat{y}$라 하면:

알고리즘이 후방 안정(backward stable)하다는 것은, 계산된 결과가 약간 섭동된 입력에 대한 정확한 답이라는 의미입니다. 즉, 후방 오차가 기계 엡실론 수준으로 작습니다.

전방 오차와 후방 오차의 관계: $\text{전방 오차} \leq \text{조건수} \times \text{후방 오차}$. 이 부등식은 수치 알고리즘 분석의 핵심 원리입니다. 후방 안정한 알고리즘이라도 문제의 조건수가 크면 전방 오차가 커질 수 있습니다.

조건수 (Condition Number)

문제의 조건수는 입력의 작은 변화가 출력에 얼마나 큰 영향을 미치는지를 나타내는 척도입니다.

함수의 조건수: 함수 $f$에서 $x$에서의 (상대) 조건수는

$$\kappa = \left|\frac{x f'(x)}{f(x)}\right|$$

행렬의 조건수: 행렬 $A$의 조건수는

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

여기서 $\|\cdot\|$는 적절한 행렬 노름입니다. $\kappa(A) \geq 1$이며:

선형 시스템에서의 의미: $A\mathbf{x} = \mathbf{b}$를 풀 때, 입력 $\mathbf{b}$에 상대적 섭동 $\frac{\|\delta \mathbf{b}\|}{\|\mathbf{b}\|}$가 있으면 해의 상대적 섭동은 다음으로 한정됩니다.

$$\frac{\|\delta \mathbf{x}\|}{\|\mathbf{x}\|} \leq \kappa(A) \frac{\|\delta \mathbf{b}\|}{\|\mathbf{b}\|}$$
주의: 조건수가 $10^k$이면 대략 $k$자리의 유효숫자를 잃을 수 있습니다. 배정밀도에서 $\kappa(A) \approx 10^{16}$이면 계산 결과를 전혀 신뢰할 수 없습니다.

비선형 방정식의 근

$f(x) = 0$의 근을 수치적으로 찾는 방법들입니다. 각 방법의 수렴 속도, 장단점, 실패 조건을 비교하여 이해하는 것이 중요합니다.

같은 방정식, 4가지 풀이법 비교

이하에서는 $f(x) = x^3 - x - 2 = 0$이라는 하나의 방정식을 이분법, 뉴턴법, 할선법(세컨트법), 고정점 반복법의 4가지 방법으로 풀어 비교합니다. 이 방정식의 실근은 $x^* \approx 1.52138$입니다.

이분법 (Bisection Method)

원리: 중간값 정리에 기반합니다. $f$가 $[a, b]$에서 연속이고 $f(a) \cdot f(b) < 0$이면, $(a, b)$ 안에 적어도 하나의 근이 존재합니다.

알고리즘:

  1. 중점 $c = \dfrac{a + b}{2}$ 계산
  2. $f(c) = 0$이면 $c$가 근, 종료
  3. $f(a) \cdot f(c) < 0$이면 $b \leftarrow c$, 아니면 $a \leftarrow c$
  4. $|b - a| < \varepsilon$ (허용 오차)이 될 때까지 반복

수렴 분석: $n$번 반복 후 구간 길이는 $\dfrac{b - a}{2^n}$이므로, 오차 한계는

$$|x^* - c_n| \leq \frac{b - a}{2^{n+1}}$$

허용 오차 $\varepsilon$ 이내로 수렴하는 데 필요한 반복 횟수:

$$n \geq \frac{\log(b - a) - \log(\varepsilon)}{\log 2}$$

수렴 차수는 선형(1차)이며, 매 반복마다 정확도가 약 1비트씩 늘어납니다.

일상 비유 — 이분법은 "숫자 맞추기 게임"입니다.

친구가 1부터 100 사이의 숫자를 하나 생각하고, 여러분이 맞추는 게임을 한다고 합시다. "50보다 큰가요?" → "예" → "75보다 큰가요?" → "아니오" → "62보다 큰가요?" … 이렇게 범위를 절반씩 줄여 나가면 최대 7번 만에 답을 찾을 수 있습니다. 이분법도 정확히 같은 원리입니다.

단계별 예시 — 이분법으로 $\sqrt{2}$ 구하기:

$f(x) = x^2 - 2 = 0$의 근, 즉 $\sqrt{2}$를 이분법으로 구해 봅시다. $f(1) = -1 < 0$이고 $f(2) = 2 > 0$이므로 근은 $[1, 2]$ 안에 있습니다.

반복$a$$b$중점 $c$$f(c)$부호다음 구간
1121.50.25$+$$[1, 1.5]$
211.51.25$-0.4375$$-$$[1.25, 1.5]$
31.251.51.375$-0.109$$-$$[1.375, 1.5]$
41.3751.51.4375$0.066$$+$$[1.375, 1.4375]$

매 반복마다 구간이 절반으로 줄어들며, 4번 반복 후 근은 $[1.375, 1.4375]$ 안에 있다는 것을 알 수 있습니다. 참값 $\sqrt{2} \approx 1.4142$가 이 구간 안에 있습니다.

이분법의 특성: 반드시 수렴하지만 느립니다. 수렴에 도함수 정보가 불필요하며, 함수의 연속성과 부호 변화만 필요합니다. 실수에서는 다른 빠른 방법의 시작점을 찾는 데 사용하기도 합니다.

뉴턴법 (Newton's Method)

일상 비유 — 뉴턴법은 "접선을 따라 미끄러지기"입니다.

곡선 위의 한 점에 서서 발 밑의 기울기를 느낀다고 상상해 봅시다. 그 기울기를 따라 직선을 그으면 $x$축과 만나는 점이 생깁니다. 그 점으로 이동해서 같은 과정을 반복하면, 곡선이 $x$축과 만나는 점(근)에 빠르게 다가갑니다. 이분법보다 훨씬 빠르지만, 시작 위치를 잘못 잡으면 엉뚱한 곳으로 갈 수도 있습니다.

유도: $f(x)$를 현재 근사값 $x_n$ 근처에서 1차 테일러 전개하면

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

$f(x) = 0$으로 놓고 $x$에 대해 풀면 다음 반복 공식을 얻습니다.

$$\boxed{x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}}$$

기하학적 해석: $(x_n, f(x_n))$에서의 접선이 $x$축과 만나는 점을 다음 근사값으로 사용합니다.

수렴 정리: $f(x^*) = 0$, $f'(x^*) \neq 0$ (단근), $f''$가 연속이면, 충분히 $x^*$에 가까운 초기값에서 뉴턴법은 이차 수렴합니다.

$$|x_{n+1} - x^*| \leq C|x_n - x^*|^2, \quad C = \frac{|f''(x^*)|}{2|f'(x^*)|} $$

예시: $f(x) = x^2 - 2$ ($\sqrt{2}$ 구하기)에서 $x_0 = 1$로 시작하면

$$x_{n+1} = x_n - \frac{x_n^2 - 2}{2x_n} = \frac{x_n + \frac{2}{x_n}}{2}$$
$n$$x_n$오차 $|x_n - \sqrt{2}|$
01.000000000000000$4.14 \times 10^{-1}$
11.500000000000000$8.58 \times 10^{-2}$
21.416666666666667$2.45 \times 10^{-3}$
31.414215686274510$2.12 \times 10^{-6}$
41.414213562374690$1.59 \times 10^{-12}$

이차 수렴의 위력: 4번 반복만에 12자리 정확도를 달성합니다.

실패 조건:

팁: 뉴턴법은 수렴이 빠르지만 발산할 수도 있습니다. 이분법은 느리지만 반드시 수렴합니다. 실무에서는 이분법으로 근의 대략적 위치를 찾은 후 뉴턴법으로 정밀하게 수렴시키는 하이브리드 방법을 사용합니다.

세컨트법 (Secant Method)

뉴턴법에서 도함수 $f'(x_n)$을 차분으로 근사합니다.

$$f'(x_n) \approx \frac{f(x_n) - f(x_{n-1})}{x_n - x_{n-1}}$$

이를 대입하면 반복 공식을 얻습니다.

$$\boxed{x_{n+1} = x_n - f(x_n) \cdot \frac{x_n - x_{n-1}}{f(x_n) - f(x_{n-1})}}$$

초기값 2개 $(x_0, x_1)$이 필요하며, 매 반복에서 함수 평가 1회만 수행합니다 (뉴턴법은 $f$와 $f'$ 2회).

수렴 차수: 초수렴(superlinear)이며, 수렴 차수는 황금비 $\phi = \frac{1+\sqrt{5}}{2} \approx 1.618$입니다.

$$|x_{n+1} - x^*| \approx C|x_n - x^*|^{1.618}$$

고정점 반복법 (Fixed-Point Iteration)

$f(x) = 0$을 $x = g(x)$ 형태로 변환한 뒤, 반복 $x_{n+1} = g(x_n)$을 수행합니다.

수렴 정리 (바나흐 고정점 정리): $g: [a,b] \to [a,b]$이 연속이고, 어떤 상수 $L < 1$에 대해 모든 $x, y \in [a,b]$에서

$$|g(x) - g(y)| \leq L|x - y|$$

를 만족하면 ($g$가 축소 사상), $g$는 유일한 고정점 $x^*$를 가지며 임의의 $x_0 \in [a,b]$에서 반복이 수렴합니다.

오차 한계:

$$|x_n - x^*| \leq \frac{L^n}{1 - L}|x_1 - x_0|$$

수렴 속도: $g'(x^*) \neq 0$이면 선형 수렴, $g'(x^*) = 0$이면 이차 이상의 수렴.

관찰: 뉴턴법은 $g(x) = x - \frac{f(x)}{f'(x)}$인 고정점 반복법의 특수한 경우입니다. 이 $g$에서 $g'(x^*) = 0$ (단근일 때)이므로 이차 수렴합니다.

근 찾기 방법 비교

방법수렴 차수함수 평가/반복도함수 필요수렴 보장
이분법1 (선형)1아니오
고정점 반복법1 (선형)1아니오조건부
세컨트법$\approx 1.618$1아니오아니오
뉴턴법2 (이차)2 ($f$, $f'$)아니오

4가지 방법 직접 비교 — $x^3 - x - 2 = 0$

동일한 방정식 $f(x) = x^3 - x - 2 = 0$의 근 $x^* \approx 1.52138$을 4가지 방법으로 구한 결과를 비교합니다.

방법 1 — 이분법: $f(1) = -2 < 0$, $f(2) = 4 > 0$이므로 $[1, 2]$에서 시작합니다.
반복$a$$b$중점 $c$$f(c)$오차 한계
1121.5$-0.125$$0.5$
21.521.75$2.609$$0.25$
31.51.751.625$1.666$$0.125$
41.51.6251.5625$0.252$$0.0625$
51.51.56251.53125$0.059$$0.03125$

5회 반복 후에도 오차 한계가 $0.03$입니다. 확실하지만 느립니다.

방법 2 — 뉴턴법: $f'(x) = 3x^2 - 1$, 초기값 $x_0 = 2$로 시작합니다.
$n$$x_n$$f(x_n)$$f'(x_n)$오차 $|x_n - x^*|$
0$2.000000$$4.000$$11.00$$4.79 \times 10^{-1}$
1$1.636364$$0.744$$7.033$$1.15 \times 10^{-1}$
2$1.530571$$0.0260$$6.028$$9.19 \times 10^{-3}$
3$1.521254$$3.5 \times 10^{-5}$$5.943$$1.3 \times 10^{-5}$

3회 반복만으로 5자리 정확도를 달성합니다. 이차 수렴의 위력입니다.

방법 3 — 할선법(세컨트법): $x_0 = 1$, $x_1 = 2$로 시작합니다.
$n$$x_n$$f(x_n)$오차 $|x_n - x^*|$
0$1.000000$$-2.000$$5.21 \times 10^{-1}$
1$2.000000$$4.000$$4.79 \times 10^{-1}$
2$1.333333$$-0.963$$1.88 \times 10^{-1}$
3$1.588235$$0.418$$6.69 \times 10^{-2}$
4$1.516484$$-0.029$$4.90 \times 10^{-3}$
5$1.521462$$5.0 \times 10^{-4}$$8.1 \times 10^{-5}$

도함수 없이 5회 반복으로 4자리 정확도를 달성합니다.

방법 4 — 고정점 반복법: $x = g(x) = (x + 2)^{1/3}$으로 변환합니다. $g'(x) = \frac{1}{3}(x+2)^{-2/3}$이므로 $|g'(x^*)| \approx 0.21 < 1$이어서 수렴이 보장됩니다. $x_0 = 1$로 시작합니다.
$n$$x_n$오차 $|x_n - x^*|$
0$1.000000$$5.21 \times 10^{-1}$
1$1.442250$$7.91 \times 10^{-2}$
2$1.506998$$1.44 \times 10^{-2}$
3$1.518708$$2.67 \times 10^{-3}$
4$1.520884$$4.96 \times 10^{-4}$

선형 수렴이므로 느리지만, 구현이 매우 간단하고 도함수가 불필요합니다.

근 찾기 방법별 수렴 속도 비교 반복 횟수 -log₁₀(오차) 0 3 6 9 12 1 2 3 4 이분법 고정점 할선법 뉴턴법

보간법

보간법(Interpolation)은 주어진 데이터 점 $(x_0, y_0), (x_1, y_1), \ldots, (x_n, y_n)$을 모두 정확히 지나는 함수를 구성하는 방법입니다.

일상 비유 — "점들을 지나는 부드러운 곡선 찾기"

온도 센서가 매시간 기온을 측정한다고 합시다: 오전 6시에 10도, 9시에 15도, 12시에 22도, 15시에 20도. 그런데 오전 8시의 기온은 얼마였을까요? 센서가 측정하지 않은 시점의 값을 측정된 점들로부터 "추정"하는 것이 바로 보간법입니다. 점들을 부드럽게 이어주는 곡선(다항식)을 찾아서, 그 곡선 위에서 원하는 점의 값을 읽어내는 것입니다.

존재성과 유일성: 서로 다른 $n+1$개의 점을 지나는 $n$차 이하의 다항식은 유일하게 존재합니다. 이를 어떤 기저(라그랑주, 뉴턴 등)로 표현하든 동일한 다항식입니다.

라그랑주 보간 (Lagrange Interpolation)

$n+1$개의 점을 지나는 최대 $n$차 다항식을 라그랑주 기저 다항식으로 표현합니다.

$$\boxed{P_n(x) = \sum_{i=0}^{n} y_i L_i(x), \quad L_i(x) = \prod_{\substack{j=0 \\ j \neq i}}^{n} \frac{x - x_j}{x_i - x_j}}$$

각 $L_i(x)$는 $L_i(x_i) = 1$이고 $j \neq i$일 때 $L_i(x_j) = 0$을 만족하므로, $P_n(x_i) = y_i$가 자동으로 성립합니다.

보간 오차: $f$가 $[a,b]$에서 $n+1$번 미분 가능하면

$$f(x) - P_n(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!} \prod_{i=0}^{n}(x - x_i)$$

여기서 $\xi$는 $x$와 보간 노드를 포함하는 구간 안의 어떤 점입니다.

단계별 예시 — 라그랑주 보간으로 곡선 찾기:

점 $(1, 1)$, $(2, 4)$, $(3, 9)$를 지나는 다항식을 구해 봅시다.

1단계: 각 점에 대응하는 기저 다항식 $L_i(x)$를 구합니다.

  • $L_0(x) = \frac{(x-2)(x-3)}{(1-2)(1-3)} = \frac{(x-2)(x-3)}{(-1)(-2)} = \frac{(x-2)(x-3)}{2}$
  • $L_1(x) = \frac{(x-1)(x-3)}{(2-1)(2-3)} = \frac{(x-1)(x-3)}{(1)(-1)} = -(x-1)(x-3)$
  • $L_2(x) = \frac{(x-1)(x-2)}{(3-1)(3-2)} = \frac{(x-1)(x-2)}{(2)(1)} = \frac{(x-1)(x-2)}{2}$

2단계: 기저 다항식에 $y$값을 곱하여 더합니다.

$$P_2(x) = 1 \cdot L_0(x) + 4 \cdot L_1(x) + 9 \cdot L_2(x)$$

3단계: 정리하면 $P_2(x) = x^2$이 됩니다. 실제로 원래 데이터가 $y = x^2$ 위의 점들이었으므로 당연한 결과입니다!

검증: $P_2(1) = 1$, $P_2(2) = 4$, $P_2(3) = 9$ — 모든 점을 정확히 지납니다.

뉴턴 보간 (Newton's Divided Difference)

분할차분(Divided Difference)을 이용하여 점진적으로 구성할 수 있는 형태입니다.

$$P_n(x) = f[x_0] + f[x_0, x_1](x - x_0) + f[x_0, x_1, x_2](x - x_0)(x - x_1) + \cdots$$

분할차분의 정의:

$$f[x_i] = f(x_i)$$ $$f[x_i, x_{i+1}] = \frac{f[x_{i+1}] - f[x_i]}{x_{i+1} - x_i}$$ $$f[x_i, x_{i+1}, \ldots, x_{i+k}] = \frac{f[x_{i+1}, \ldots, x_{i+k}] - f[x_i, \ldots, x_{i+k-1}]}{x_{i+k} - x_i}$$

장점: 새로운 데이터 점이 추가되면 기존 계수를 유지하고 항만 추가하면 되므로 효율적입니다. 계산 복잡도는 $O(n^2)$입니다.

에르미트 보간 (Hermite Interpolation)

에르미트 보간은 데이터 점에서 함수값뿐만 아니라 도함수 값까지 일치하는 다항식을 구성합니다.

$n+1$개의 점에서 함수값과 1차 도함수가 주어지면, $2n+1$차 다항식 $H_{2n+1}(x)$를 구합니다.

$$H_{2n+1}(x_i) = f(x_i), \quad H'_{2n+1}(x_i) = f'(x_i), \quad i = 0, 1, \ldots, n$$

오차:

$$f(x) - H_{2n+1}(x) = \frac{f^{(2n+2)}(\xi)}{(2n+2)!}\left[\prod_{i=0}^{n}(x-x_i)\right]^2$$

스플라인 보간 (Spline Interpolation)

고차 다항식 보간은 노드 사이에서 심하게 진동할 수 있습니다 (룽게 현상). 스플라인 보간은 구간별로 저차 다항식을 이어 붙여 이 문제를 해결합니다.

자연 3차 스플라인 (Natural Cubic Spline): 각 구간 $[x_i, x_{i+1}]$에서 3차 다항식 $S_i(x)$를 사용하되 다음 조건을 만족합니다.

$h_i = x_{i+1} - x_i$로 놓고 $M_i = S''(x_i)$라 하면, 각 구간에서의 스플라인은

$$S_i(x) = \frac{M_i}{6h_i}(x_{i+1}-x)^3 + \frac{M_{i+1}}{6h_i}(x-x_i)^3 + \left(\frac{y_i}{h_i} - \frac{M_i h_i}{6}\right)(x_{i+1}-x) + \left(\frac{y_{i+1}}{h_i} - \frac{M_{i+1} h_i}{6}\right)(x-x_i)$$

$M_i$들은 삼중대각(tridiagonal) 선형 시스템을 풀어 구합니다.

룽게 현상: 등간격 노드에서 고차 다항식 보간을 하면 구간 끝에서 진동이 심해집니다. 예를 들어, $f(x) = \frac{1}{1+25x^2}$을 $[-1, 1]$에서 등간격으로 보간하면 차수가 높아질수록 끝점 근처에서 오차가 폭발적으로 증가합니다. 해결 방법: (1) 체비셰프 노드 사용, (2) 스플라인 보간 사용.

4가지 보간법 직접 비교

데이터 점 $(0, 1)$, $(1, 2)$, $(2, 5)$, $(3, 10)$에 대해 네 가지 보간법을 적용하여 $x = 1.5$에서의 값을 추정합니다 (참값을 $f(x) = 1 + x + \frac{x(x-1)}{2} + \frac{x(x-1)(x-2)}{6}$로 가정).

라그랑주 보간 — 기저 다항식 직접 계산:

$L_0(1.5) = \frac{(0.5)(-0.5)(-1.5)}{(-1)(-2)(-3)} = \frac{0.375}{-6} = -0.0625$

$L_1(1.5) = \frac{(1.5)(-0.5)(-1.5)}{(1)(-1)(-2)} = \frac{1.125}{2} = 0.5625$

$L_2(1.5) = \frac{(1.5)(0.5)(-1.5)}{(2)(1)(-1)} = \frac{-1.125}{-2} = 0.5625$

$L_3(1.5) = \frac{(1.5)(0.5)(-0.5)}{(3)(2)(1)} = \frac{-0.375}{6} = -0.0625$

$P(1.5) = 1(-0.0625) + 2(0.5625) + 5(0.5625) + 10(-0.0625) = 3.25$

뉴턴 보간 — 분할차분표:
$x_i$$f[\cdot]$$f[\cdot,\cdot]$$f[\cdot,\cdot,\cdot]$$f[\cdot,\cdot,\cdot,\cdot]$
01
121
2531
310510

$P(x) = 1 + 1(x-0) + 1(x-0)(x-1) + 0(x-0)(x-1)(x-2)$

$P(1.5) = 1 + 1.5 + 1(1.5)(0.5) = 1 + 1.5 + 0.75 = 3.25$ — 라그랑주와 동일합니다.

에르미트 보간: 함수값과 도함수 $f'(0)=1, f'(1)=2, f'(2)=4, f'(3)=7$이 추가로 주어지면, 7차 다항식을 구성합니다. 에르미트 보간은 함수의 형태를 더 정확히 반영하지만, 도함수 정보가 필요하다는 제약이 있습니다.
3차 스플라인 보간: 각 구간 $[0,1], [1,2], [2,3]$에서 별도의 3차 다항식을 사용합니다. 이음점에서 1차, 2차 도함수의 연속성을 보장하므로 매끄러운 곡선을 생성합니다. 고차 다항식 보간의 룽게 현상을 피할 수 있습니다.

보간법 비교 요약

방법필요 정보다항식 차수장점단점
라그랑주함수값$n$차이론적으로 명쾌점 추가 시 전체 재계산
뉴턴함수값$n$차점진적 구성 가능분할차분표 필요
에르미트함수값 + 도함수$2n+1$차높은 정밀도도함수 정보 필요
3차 스플라인함수값구간별 3차룽게 현상 방지삼중대각 시스템 풀이 필요
룽게 현상: 고차 다항식 vs 스플라인 $x$ 원래 함수 고차 다항식 (룽게 현상) 3차 스플라인

수치 미분

도함수를 해석적으로 구하기 어려울 때, 함수값의 차분으로 근사합니다.

일상 비유 — "속도계 없이 속도 구하기"

자동차에 속도계가 없다면, 일정 시간 동안 이동한 거리를 재서 평균 속도를 구할 수 있습니다. "10초 동안 100m를 갔으니 속도는 약 10m/s"처럼 말입니다. 시간 간격을 더 짧게 잡을수록 순간 속도에 더 가까워집니다. 수치 미분도 같은 원리입니다. 함수값의 변화량을 입력의 변화량으로 나누어 도함수(변화율)를 근사합니다.

차분 공식

공식근사식절단 오차
전방 차분 (Forward)$f'(x) \approx \dfrac{f(x+h) - f(x)}{h}$$O(h)$
후방 차분 (Backward)$f'(x) \approx \dfrac{f(x) - f(x-h)}{h}$$O(h)$
중앙 차분 (Central)$f'(x) \approx \dfrac{f(x+h) - f(x-h)}{2h}$$O(h^2)$
단계별 예시 — 세 가지 차분 공식 비교:

$f(x) = x^3$에서 $x = 2$에서의 도함수를 구해 봅시다. 정확한 값은 $f'(2) = 3 \times 2^2 = 12$입니다. $h = 0.1$로 세 가지 방법을 비교합니다.

  • 전진 차분: $\frac{f(2.1) - f(2)}{0.1} = \frac{9.261 - 8}{0.1} = 12.61$ — 오차 $0.61$
  • 후진 차분: $\frac{f(2) - f(1.9)}{0.1} = \frac{8 - 6.859}{0.1} = 11.41$ — 오차 $0.59$
  • 중앙 차분: $\frac{f(2.1) - f(1.9)}{0.2} = \frac{9.261 - 6.859}{0.2} = 12.01$ — 오차 $0.01$

중앙 차분이 압도적으로 정확합니다! 오차가 $O(h^2)$이기 때문입니다.

유도 (테일러 전개): $f(x+h) = f(x) + hf'(x) + \frac{h^2}{2}f''(x) + O(h^3)$이므로

$$f'(x) = \frac{f(x+h) - f(x)}{h} - \frac{h}{2}f''(\xi) = \frac{f(x+h) - f(x)}{h} + O(h)$$

중앙 차분의 유도: $f(x+h)$와 $f(x-h)$의 테일러 전개를 빼면

$$f(x+h) - f(x-h) = 2hf'(x) + \frac{h^3}{3}f'''(x) + O(h^5)$$ $$\therefore f'(x) = \frac{f(x+h) - f(x-h)}{2h} - \frac{h^2}{6}f'''(\xi) = \frac{f(x+h) - f(x-h)}{2h} + O(h^2)$$

2차 도함수의 수치 근사

$$f''(x) \approx \frac{f(x+h) - 2f(x) + f(x-h)}{h^2}, \quad \text{오차: } O(h^2)$$

최적 스텝 크기

$h$를 줄이면 절단 오차는 감소하지만 반올림 오차는 증가합니다. 전방 차분에서 총 오차를 최소화하는 최적 $h$는

$$h_{\text{opt}} \approx \sqrt{\epsilon_{\text{mach}}} \approx 10^{-8} \quad (\text{배정밀도})$$

중앙 차분에서는

$$h_{\text{opt}} \approx \epsilon_{\text{mach}}^{1/3} \approx 10^{-5} \quad (\text{배정밀도})$$
주의: $h$를 무작정 작게 하면 오히려 정밀도가 나빠집니다. 절단 오차와 반올림 오차 사이의 균형점을 찾아야 합니다.

리처드슨 외삽 (Richardson Extrapolation)

같은 차분 공식을 서로 다른 스텝 크기 $h$와 $h/2$로 계산한 후, 절단 오차의 주요 항을 소거하여 더 높은 정확도를 얻는 기법입니다.

중앙 차분 $D(h)$의 오차가 $O(h^2)$이면:

$$D_{\text{improved}} = \frac{4D(h/2) - D(h)}{3}$$

이 결과는 $O(h^4)$ 정확도를 갖습니다.

단계별 예시 — 리처드슨 외삽:

$f(x) = \sin(x)$에서 $x = 1$의 도함수를 구합니다. 정확한 값: $f'(1) = \cos(1) \approx 0.540302$.

$h = 0.1$: 중앙 차분 $D(0.1) = \frac{\sin(1.1) - \sin(0.9)}{0.2} \approx 0.540260$ (오차: $4.2 \times 10^{-5}$)

$h = 0.05$: 중앙 차분 $D(0.05) = \frac{\sin(1.05) - \sin(0.95)}{0.1} \approx 0.540292$ (오차: $1.0 \times 10^{-5}$)

리처드슨 외삽:

$$D_{\text{improved}} = \frac{4(0.540292) - 0.540260}{3} = \frac{2.160908}{3} \approx 0.540303$$

오차가 $1 \times 10^{-6}$으로, $O(h^4)$ 정확도를 달성합니다!

고계 도함수의 수치 근사

3차 도함수와 4차 도함수의 중앙 차분 공식입니다.

$$f'''(x) \approx \frac{f(x+2h) - 2f(x+h) + 2f(x-h) - f(x-2h)}{2h^3}, \quad O(h^2)$$ $$f^{(4)}(x) \approx \frac{f(x+2h) - 4f(x+h) + 6f(x) - 4f(x-h) + f(x-2h)}{h^4}, \quad O(h^2)$$

수치 적분

정적분 $\int_a^b f(x)\,dx$를 근사적으로 계산합니다. 구간 $[a, b]$를 $n$등분하여 $h = \frac{b-a}{n}$, $x_k = a + kh$로 놓습니다.

일상 비유 — "곡선 아래의 넓이를 어떻게 잴까요?"

울퉁불퉁한 호수의 면적을 재고 싶다고 합시다. 자로 정확히 잴 수 없으므로, 호수 위에 격자무늬 종이를 놓고 격자 안에 들어가는 칸의 수를 세는 방법을 쓸 수 있습니다. 격자를 더 작게 만들면 더 정확해집니다. 수치 적분도 같은 원리입니다. 곡선 아래의 넓이를 사다리꼴이나 포물선 모양의 작은 도형들로 나누어 더하는 것입니다.

사다리꼴 공식 (Trapezoidal Rule)

각 소구간에서 $f$를 1차식(직선)으로 근사합니다.

$$\boxed{\int_a^b f(x)\,dx \approx T_n = \frac{h}{2}\left[f(x_0) + 2\sum_{k=1}^{n-1}f(x_k) + f(x_n)\right]}$$
단계별 예시 — 사다리꼴 법칙으로 $\int_0^1 x^2\,dx$ 구하기:

정확한 값: $\int_0^1 x^2\,dx = \frac{1}{3} \approx 0.3333$. $n = 4$등분하여 사다리꼴 법칙을 적용합시다.

1단계: $h = \frac{1-0}{4} = 0.25$, 노드: $x_0=0, x_1=0.25, x_2=0.5, x_3=0.75, x_4=1$

2단계: 함수값 계산: $f(0)=0$, $f(0.25)=0.0625$, $f(0.5)=0.25$, $f(0.75)=0.5625$, $f(1)=1$

3단계: 공식 적용:

$$T_4 = \frac{0.25}{2}[0 + 2(0.0625 + 0.25 + 0.5625) + 1] = 0.125 \times [0 + 1.75 + 1] = 0.34375$$

오차: $|0.3333 - 0.34375| = 0.01042$ — 4등분만으로도 상당히 정확합니다.

오차 공식:

$$\int_a^b f(x)\,dx - T_n = -\frac{(b-a)h^2}{12}f''(\xi), \quad \xi \in (a, b)$$

오차 차수: $O(h^2)$. 즉, $h$를 절반으로 줄이면 오차가 약 $\frac{1}{4}$로 줄어듭니다.

심프슨 공식 (Simpson's Rule)

두 소구간씩 묶어 $f$를 2차식(포물선)으로 근사합니다. $n$은 짝수여야 합니다.

$$\boxed{\int_a^b f(x)\,dx \approx S_n = \frac{h}{3}\left[f(x_0) + 4\sum_{\substack{k=1 \\ k\,\text{홀}}}^{n-1}f(x_k) + 2\sum_{\substack{k=2 \\ k\,\text{짝}}}^{n-2}f(x_k) + f(x_n)\right]}$$

오차 공식:

$$\int_a^b f(x)\,dx - S_n = -\frac{(b-a)h^4}{180}f^{(4)}(\xi), \quad \xi \in (a, b)$$

오차 차수: $O(h^4)$. 3차 이하의 다항식은 정확하게 적분합니다.

단계별 예시 — 심프슨 법칙으로 $\int_0^1 e^x\,dx$ 구하기:

정확한 값: $e - 1 \approx 1.71828$. $n = 4$등분으로 심프슨 법칙을 적용합시다.

1단계: $h = 0.25$, 노드: $x_0=0, x_1=0.25, x_2=0.5, x_3=0.75, x_4=1$

2단계: 함수값 계산:

  • $f(x_0) = e^0 = 1.0000$
  • $f(x_1) = e^{0.25} = 1.2840$ (홀수 번째 → 계수 4)
  • $f(x_2) = e^{0.5} = 1.6487$ (짝수 번째 → 계수 2)
  • $f(x_3) = e^{0.75} = 2.1170$ (홀수 번째 → 계수 4)
  • $f(x_4) = e^{1} = 2.7183$

3단계: 공식 적용:

$$S_4 = \frac{0.25}{3}[1.0000 + 4(1.2840) + 2(1.6487) + 4(2.1170) + 2.7183]$$ $$= \frac{0.25}{3}[1 + 5.136 + 3.2974 + 8.468 + 2.7183] = \frac{0.25}{3} \times 20.6197 \approx 1.71831$$

오차: $|1.71828 - 1.71831| \approx 0.00003$ — $n = 4$만으로도 5자리 유효숫자를 얻습니다! 사다리꼴 법칙보다 훨씬 정확합니다.

가우스 구적법 (Gaussian Quadrature)

등간격 노드 대신 최적의 노드와 가중치를 선택하여 정밀도를 극대화합니다.

$$\int_{-1}^{1} f(x)\,dx \approx \sum_{i=1}^{n} w_i f(x_i)$$

$n$개의 노드로 최대 $2n-1$차 다항식을 정확하게 적분할 수 있습니다.

가우스-르장드르 구적법: 노드 $x_i$는 $n$차 르장드르 다항식 $P_n(x)$의 근이며, 가중치는

$$w_i = \frac{2}{(1 - x_i^2)[P'_n(x_i)]^2}$$

처음 몇 개의 노드와 가중치:

$n$노드 $x_i$가중치 $w_i$
1$0$$2$
2$\pm\frac{1}{\sqrt{3}}$$1$
3$0, \;\pm\sqrt{\frac{3}{5}}$$\frac{8}{9}, \;\frac{5}{9}$

일반 구간 $[a, b]$로의 변환: $x = \frac{b-a}{2}t + \frac{a+b}{2}$, $dx = \frac{b-a}{2}dt$를 적용합니다.

3가지 방법으로 같은 적분 풀기 — $\int_0^{\pi} \sin(x)\,dx$

정확한 값: $\int_0^{\pi}\sin(x)\,dx = [-\cos(x)]_0^{\pi} = 2$. $n = 4$ 구간($h = \pi/4 \approx 0.7854$)으로 세 방법을 비교합니다.

방법 1 — 사다리꼴 공식 ($n=4$):

노드: $x_k = k\pi/4$, 함수값: $f(0)=0$, $f(\pi/4) \approx 0.7071$, $f(\pi/2)=1$, $f(3\pi/4) \approx 0.7071$, $f(\pi)=0$.

$$T_4 = \frac{\pi/4}{2}[0 + 2(0.7071 + 1 + 0.7071) + 0] = \frac{\pi}{8} \times 4.8284 \approx 1.8961$$

오차: $|2 - 1.8961| = 0.1039$ — 약 5%의 오차입니다.

방법 2 — 심프슨 공식 ($n=4$): $$S_4 = \frac{\pi/4}{3}[0 + 4(0.7071) + 2(1) + 4(0.7071) + 0] = \frac{\pi}{12} \times 7.6569 \approx 2.0046$$

오차: $|2 - 2.0046| = 0.0046$ — 0.2%에 불과합니다! 사다리꼴보다 22배 더 정확합니다.

방법 3 — 가우스-르장드르 구적법 ($n=3$ 노드):

$[0, \pi]$를 $[-1, 1]$로 변환: $x = \frac{\pi}{2}t + \frac{\pi}{2}$, $dx = \frac{\pi}{2}dt$.

3점 가우스 노드와 가중치: $t_1 = -\sqrt{3/5}$, $t_2 = 0$, $t_3 = \sqrt{3/5}$, $w_1 = w_3 = 5/9$, $w_2 = 8/9$.

$$G_3 = \frac{\pi}{2}\left[\frac{5}{9}\sin\!\left(\frac{\pi}{2}(1-\sqrt{3/5})\right) + \frac{8}{9}\sin\!\left(\frac{\pi}{2}\right) + \frac{5}{9}\sin\!\left(\frac{\pi}{2}(1+\sqrt{3/5})\right)\right]$$ $$= \frac{\pi}{2}\left[\frac{5}{9}(0.3379) + \frac{8}{9}(1) + \frac{5}{9}(0.9415)\right] \approx 2.0011$$

오차: $|2 - 2.0011| = 0.0011$ — 단 3개의 노드만으로 심프슨(4구간)보다 더 정확합니다!

수치 적분 방법 비교

방법오차 차수정확하게 적분 가능한 최대 다항식 차수$\int_0^{\pi}\sin x\,dx$ 오차
사다리꼴 ($n=4$)$O(h^2)$1차$0.1039$
심프슨 ($n=4$)$O(h^4)$3차$0.0046$
가우스 ($n=3$ 노드)$O(h^{2n})$$2n-1$차$0.0011$

복합 구적법과 롬버그 적분

롬버그 적분(Romberg Integration)은 사다리꼴 공식에 리처드슨 외삽을 반복 적용하여 고정밀 결과를 얻는 방법입니다.

$$R(n, 0) = T_{2^n} \quad (\text{사다리꼴 공식})$$ $$R(n, m) = \frac{4^m R(n, m-1) - R(n-1, m-1)}{4^m - 1}$$

$R(1, 1)$은 심프슨 공식과 동일하며, $R(2, 2)$는 부울(Boole) 공식에 대응합니다.

수치 적분 방법의 기하학적 해석 사다리꼴 직선으로 근사 심프슨 포물선으로 근사 가우스 구적 최적 노드 선택

상미분방정식의 수치해법

초기값 문제 $y' = f(t, y)$, $y(t_0) = y_0$를 수치적으로 풀 때, 시간 스텝 $h$로 이산화하여 $y_n \approx y(t_n)$을 구합니다.

전진 오일러 방법 (Forward/Explicit Euler)

가장 간단한 방법으로, 현재 점에서의 기울기로 다음 값을 예측합니다.

$$\boxed{y_{n+1} = y_n + h f(t_n, y_n)}$$

오차: 국소 절단 오차 $O(h^2)$, 전역 오차 $O(h)$ — 1차 방법입니다.

예시: $y' = -2y$, $y(0) = 1$ (해석해: $y = e^{-2t}$)을 $h = 0.1$로 풀면

$$y_1 = y_0 + 0.1 \cdot (-2 \cdot 1) = 0.8 \quad (\text{정확값: } e^{-0.2} \approx 0.8187)$$

후진 오일러 방법 (Backward/Implicit Euler)

다음 점에서의 기울기를 사용합니다 (음함수 방법).

$$\boxed{y_{n+1} = y_n + h f(t_{n+1}, y_{n+1})}$$

매 스텝에서 비선형 방정식을 풀어야 하지만, 강성(stiff) 방정식에 대해 훨씬 안정적입니다.

안정성 (Stability): 테스트 방정식 $y' = \lambda y$ ($\text{Re}(\lambda) < 0$)에 적용할 때, 전진 오일러는 $|1 + h\lambda| < 1$일 때만 안정하지만, 후진 오일러는 모든 $h > 0$에서 안정합니다 (A-안정). 강성 문제에서는 음함수 방법이 필수적입니다.

개선된 오일러 방법 (Heun's Method / Modified Euler)

예측-수정(Predictor-Corrector) 접근법입니다.

$$\tilde{y}_{n+1} = y_n + h f(t_n, y_n) \quad (\text{예측})$$ $$y_{n+1} = y_n + \frac{h}{2}[f(t_n, y_n) + f(t_{n+1}, \tilde{y}_{n+1})] \quad (\text{수정})$$

이는 2차 룽게-쿠타 방법의 한 형태이며, 전역 오차는 $O(h^2)$입니다.

4차 룽게-쿠타 방법 (RK4)

가장 널리 사용되는 방법으로, 정확도와 효율의 균형이 뛰어납니다.

$$\boxed{\begin{aligned} k_1 &= f(t_n, \; y_n) \\ k_2 &= f\!\left(t_n + \tfrac{h}{2}, \; y_n + \tfrac{h}{2}k_1\right) \\ k_3 &= f\!\left(t_n + \tfrac{h}{2}, \; y_n + \tfrac{h}{2}k_2\right) \\ k_4 &= f(t_n + h, \; y_n + hk_3) \\[6pt] y_{n+1} &= y_n + \frac{h}{6}(k_1 + 2k_2 + 2k_3 + k_4) \end{aligned}}$$

오차: 국소 절단 오차 $O(h^5)$, 전역 오차 $O(h^4)$. 매 스텝에서 함수 평가 4회가 필요합니다.

예시: $y' = -2y$, $y(0) = 1$을 $h = 0.1$로 RK4 적용:

단계
$k_1$$f(0, 1) = -2$
$k_2$$f(0.05, 1 + 0.05 \cdot (-2)) = f(0.05, 0.9) = -1.8$
$k_3$$f(0.05, 1 + 0.05 \cdot (-1.8)) = f(0.05, 0.91) = -1.82$
$k_4$$f(0.1, 1 + 0.1 \cdot (-1.82)) = f(0.1, 0.818) = -1.636$
$y_1$$1 + \frac{0.1}{6}(-2 + 2(-1.8) + 2(-1.82) + (-1.636)) \approx 0.81873$

정확값 $e^{-0.2} \approx 0.81873$과 소수점 이하 5자리까지 일치합니다.

4가지 방법으로 같은 ODE 풀기 — $y' = -2y$, $y(0) = 1$

해석해: $y(t) = e^{-2t}$. $h = 0.5$로 $t = 0$부터 $t = 2$까지 각 방법의 결과를 비교합니다.

$t$정확값오일러개선된 오일러(RK2)RK4
$0.0$$1.0000$$1.0000$$1.0000$$1.0000$
$0.5$$0.3679$$0.0000$$0.2500$$0.3672$
$1.0$$0.1353$$0.0000$$0.0625$$0.1350$
$1.5$$0.0498$$0.0000$$0.0156$$0.0497$
$2.0$$0.0183$$0.0000$$0.0039$$0.0183$
관찰: $h = 0.5$에서 전진 오일러는 $y_1 = 1 + 0.5 \times (-2) \times 1 = 0$이 되어 해가 0으로 고정됩니다. $|1 + h\lambda| = |1 + 0.5 \times (-2)| = 0$이기 때문입니다. $h\lambda = -1$은 정확히 안정 영역의 경계에 있습니다. $h > 0.5$로 키우면 $h\lambda < -2$가 되어 발산하게 됩니다. 이처럼 양함수 방법에서는 안정성 조건에 의해 스텝 크기가 제한됩니다.

적응적 스텝 크기 제어 (Adaptive Step Size)

고정 스텝 크기 대신, 국소 오차 추정에 따라 스텝 크기를 자동 조절하는 방법입니다.

임베디드 룽게-쿠타 방법 (RK45 / Dormand-Prince): 같은 $k_i$ 계산으로 4차와 5차 근사를 동시에 구합니다.

$$y_{n+1}^{(4)} = y_n + h\sum_{i=1}^{s} b_i k_i, \quad y_{n+1}^{(5)} = y_n + h\sum_{i=1}^{s} b_i^* k_i$$

두 근사의 차이로 국소 오차를 추정합니다.

$$\text{err} = \|y_{n+1}^{(5)} - y_{n+1}^{(4)}\|$$

스텝 크기 조절:

$$h_{\text{new}} = h \cdot \min\!\left(h_{\max}, \; \max\!\left(h_{\min}, \; 0.9 \left(\frac{\text{tol}}{\text{err}}\right)^{1/5}\right)\right)$$

장점: 해가 급변하는 구간에서는 스텝을 줄이고, 완만한 구간에서는 키움으로써 효율성과 정확도를 동시에 확보합니다.

다단계 방법 (Multistep Methods)

이전 여러 스텝의 정보를 활용하여 다음 값을 예측합니다.

아담스-배쉬포스 2단계 (Adams-Bashforth 2-step, AB2):

$$y_{n+2} = y_{n+1} + \frac{h}{2}[3f(t_{n+1}, y_{n+1}) - f(t_n, y_n)]$$

양함수 방법이며 스텝당 함수 평가 1회입니다. 전역 오차 $O(h^2)$.

아담스-멀턴 2단계 (Adams-Moulton 2-step, AM2) — 사다리꼴 방법:

$$y_{n+1} = y_n + \frac{h}{2}[f(t_{n+1}, y_{n+1}) + f(t_n, y_n)]$$

음함수 방법이며 전역 오차 $O(h^2)$이지만, 안정성이 월등합니다.

ODE 수치해법 비교

방법차수함수 평가/스텝양함수/음함수안정성
전진 오일러11양함수조건부 안정
후진 오일러11 (+ 비선형 풀이)음함수A-안정
개선된 오일러22양함수조건부 안정
RK444양함수조건부 안정
RK45 (적응적)4~56양함수조건부 안정 + 오차 제어
AB221양함수조건부 안정
AM221 (+ 비선형 풀이)음함수A-안정

강성 방정식 (Stiff Equations)

해 자체는 완만하게 변하지만, 시스템의 고유값 비율이 극단적으로 큰 경우를 강성(stiff) 문제라 합니다.

$$\text{강성비} = \frac{\max|\lambda_i|}{\min|\lambda_i|} \gg 1$$

강성 문제에서 양함수 방법은 안정성을 위해 매우 작은 $h$를 사용해야 하므로 비효율적입니다. 음함수 방법(후진 오일러, BDF 등)이나 특수 설계된 방법(DIRK, SDIRK)을 사용해야 합니다.

예시: 화학 반응 동력학에서 빠른 반응과 느린 반응이 공존하면 강성 시스템이 됩니다. 예를 들어, $y_1' = -1000y_1 + y_2$, $y_2' = y_1 - y_2$에서 고유값은 약 $-1000$과 $-1$이므로 강성비가 약 $1000$입니다.

선형계의 수치 해법

$A\mathbf{x} = \mathbf{b}$ ($A$는 $n \times n$ 행렬)를 수치적으로 풀 때, 크게 직접법반복법으로 나뉩니다.

일상 비유 — 연립방정식은 "미지수 찾기 퍼즐"입니다.

"사과 2개와 귤 3개의 값이 3,000원이고, 사과 1개와 귤 2개의 값이 1,800원입니다. 사과와 귤의 개당 가격은?" 이런 문제가 연립방정식입니다. 미지수가 2~3개일 때는 손으로 풀 수 있지만, 현실 문제에서는 수만~수억 개의 미지수가 등장합니다. 이때 컴퓨터로 효율적이고 안정적으로 푸는 방법이 필요합니다.

가우스 소거법 (Gaussian Elimination)

행렬을 상삼각 형태로 변환한 후 후진 대입(back substitution)으로 해를 구합니다.

연산 횟수: $\frac{2}{3}n^3 + O(n^2)$ — $O(n^3)$

단계별 예시 — 가우스 소거법으로 연립방정식 풀기:

다음 연립방정식을 풀어 봅시다.

$$\begin{cases} 2x + y - z = 8 \\ -3x - y + 2z = -11 \\ -2x + y + 2z = -3 \end{cases}$$

1단계 — 확대 행렬 구성:

$$\left(\begin{array}{ccc|c} 2 & 1 & -1 & 8 \\ -3 & -1 & 2 & -11 \\ -2 & 1 & 2 & -3 \end{array}\right)$$

2단계 — 전방 소거 (상삼각 형태 만들기):

  • $R_2 \leftarrow R_2 + \frac{3}{2}R_1$: 2행의 첫 번째 원소를 0으로 만듭니다.
  • $R_3 \leftarrow R_3 + R_1$: 3행의 첫 번째 원소를 0으로 만듭니다.
  • 계속 소거하여 상삼각 형태를 만듭니다.

3단계 — 후진 대입: 마지막 행부터 역순으로 미지수를 구합니다.

결과: $x = 2$, $y = 3$, $z = -1$

부분 피벗팅 (Partial Pivoting): 각 단계에서 현재 열의 아래쪽 원소 중 절대값이 가장 큰 것을 피벗으로 선택합니다. 이는 수치적 안정성을 위해 필수적입니다.

부분 피벗팅이 필요한 이유: 피벗이 0에 가까우면 소거 과정에서 곱해지는 수가 매우 커져 반올림 오차가 증폭됩니다. 예를 들어,

$$\begin{pmatrix} 10^{-20} & 1 \\ 1 & 1 \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} = \begin{pmatrix} 1 \\ 2 \end{pmatrix}$$

피벗팅 없이 풀면 유한 정밀도에서 $x_2 \approx 1$, $x_1 \approx 0$을 얻지만, 행을 교환하면 정확한 답 $x_1 \approx 1$, $x_2 \approx 1$을 얻습니다.

LU 분해

$A = LU$ (또는 피벗팅 포함 $PA = LU$)로 분해하면, $A\mathbf{x} = \mathbf{b}$를 두 단계로 풀 수 있습니다.

  1. 전진 대입: $L\mathbf{y} = \mathbf{b}$를 풀어 $\mathbf{y}$ 구함 — $O(n^2)$
  2. 후진 대입: $U\mathbf{x} = \mathbf{y}$를 풀어 $\mathbf{x}$ 구함 — $O(n^2)$

분해 자체는 $O(n^3)$이지만, 한 번 분해하면 여러 우변 $\mathbf{b}$에 대해 $O(n^2)$으로 풀 수 있습니다.

촐레스키 분해: $A$가 대칭 양의 정부호(SPD)이면 $A = LL^T$로 분해 가능하며, 연산량이 LU 분해의 약 절반($\frac{1}{3}n^3$)입니다.

반복법

대규모 희소 행렬에서 직접법은 비효율적일 수 있으므로, 반복법이 선호됩니다. $A = D - L - U$ (대각, 엄격한 하삼각, 엄격한 상삼각)로 분할합니다.

야코비 반복법 (Jacobi Method)

$$\mathbf{x}^{(k+1)} = D^{-1}(L + U)\mathbf{x}^{(k)} + D^{-1}\mathbf{b}$$

성분별로 쓰면:

$$x_i^{(k+1)} = \frac{1}{a_{ii}}\left(b_i - \sum_{\substack{j=1 \\ j \neq i}}^{n} a_{ij}x_j^{(k)}\right)$$

특징: 각 성분을 독립적으로 계산하므로 병렬화가 용이합니다.

가우스-자이델 반복법 (Gauss-Seidel Method)

$$\mathbf{x}^{(k+1)} = (D - L)^{-1}U\mathbf{x}^{(k)} + (D - L)^{-1}\mathbf{b}$$

성분별로 쓰면:

$$x_i^{(k+1)} = \frac{1}{a_{ii}}\left(b_i - \sum_{j=1}^{i-1} a_{ij}x_j^{(k+1)} - \sum_{j=i+1}^{n} a_{ij}x_j^{(k)}\right)$$

이미 갱신된 $x_j^{(k+1)}$을 즉시 사용하므로 야코비보다 일반적으로 빠르게 수렴합니다.

SOR (Successive Over-Relaxation)

가우스-자이델에 이완 계수 $\omega$를 도입하여 수렴을 가속합니다.

$$x_i^{(k+1)} = (1 - \omega)x_i^{(k)} + \frac{\omega}{a_{ii}}\left(b_i - \sum_{j=1}^{i-1} a_{ij}x_j^{(k+1)} - \sum_{j=i+1}^{n} a_{ij}x_j^{(k)}\right)$$

최적 $\omega$를 찾으면 수렴 속도가 크게 향상되지만, 최적값은 문제에 의존합니다.

수렴 조건:

조건야코비가우스-자이델SOR
엄격한 대각 우세수렴수렴$0 < \omega \leq 1$에서 수렴
대칭 양의 정부호수렴$0 < \omega < 2$에서 수렴
스펙트럼 반경 $\rho(T) < 1$반복 행렬 $T$의 스펙트럼 반경이 1 미만이면 수렴
대각 우세 (Diagonally Dominant): 행렬 $A$가 엄격한 대각 우세라 함은, 모든 $i$에 대해 $|a_{ii}| > \sum_{j \neq i} |a_{ij}|$를 만족하는 것입니다. 이 조건은 야코비, 가우스-자이델 방법의 수렴을 보장하는 충분 조건입니다.

직접법 vs 반복법 — 같은 시스템으로 비교

다음 시스템을 직접법(LU 분해)과 반복법(야코비, 가우스-자이델)으로 풀어 비교합니다.

$$\begin{pmatrix} 4 & -1 & 0 \\ -1 & 4 & -1 \\ 0 & -1 & 4 \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \\ x_3 \end{pmatrix} = \begin{pmatrix} 15 \\ 10 \\ 10 \end{pmatrix}$$

정확한 해: $x_1 = 5$, $x_2 = 5$, $x_3 = \frac{15}{4} = 3.75$.

LU 분해 풀이:

$A = LU$로 분해하면:

$$L = \begin{pmatrix} 1 & 0 & 0 \\ -1/4 & 1 & 0 \\ 0 & -4/15 & 1 \end{pmatrix}, \quad U = \begin{pmatrix} 4 & -1 & 0 \\ 0 & 15/4 & -1 \\ 0 & 0 & 56/15 \end{pmatrix}$$

$L\mathbf{y} = \mathbf{b}$를 전진 대입, $U\mathbf{x} = \mathbf{y}$를 후진 대입으로 풀면 정확한 해를 (반올림 오차 제외) 얻습니다.

야코비 반복법 ($\mathbf{x}^{(0)} = (0, 0, 0)^T$):
반복$x_1$$x_2$$x_3$$\|\mathbf{x}^{(k)} - \mathbf{x}^*\|_\infty$
0$0$$0$$0$$5.000$
1$3.750$$2.500$$2.500$$2.500$
2$4.375$$4.063$$3.125$$0.937$
3$4.766$$4.625$$3.516$$0.375$
5$4.955$$4.934$$3.707$$0.066$
10$4.999$$4.999$$3.749$$0.001$
가우스-자이델 반복법 ($\mathbf{x}^{(0)} = (0, 0, 0)^T$):
반복$x_1$$x_2$$x_3$$\|\mathbf{x}^{(k)} - \mathbf{x}^*\|_\infty$
0$0$$0$$0$$5.000$
1$3.750$$3.438$$3.359$$1.562$
2$4.609$$4.492$$3.623$$0.508$
3$4.873$$4.874$$3.718$$0.127$
5$4.992$$4.993$$3.748$$0.008$

가우스-자이델은 5회 반복으로 야코비 10회와 비슷한 정확도를 달성합니다.

선형계 해법 비교 요약

방법연산 복잡도메모리적합한 문제
가우스 소거/LU$O(n^3)$$O(n^2)$소~중규모 밀집 행렬
콜레스키$O(n^3/3)$$O(n^2)$대칭 양의 정부호 행렬
야코비스텝당 $O(n^2)$$O(n)$대규모 희소, 병렬 환경
가우스-자이델스텝당 $O(n^2)$$O(n)$대규모 희소, 순차 환경
SOR스텝당 $O(n^2)$$O(n)$최적 $\omega$ 알 때
켤레 기울기법(CG)스텝당 $O(\text{nnz})$$O(n)$SPD 희소 행렬

켤레 기울기법 (Conjugate Gradient Method)

대칭 양의 정부호(SPD) 행렬에 대한 가장 효율적인 반복법입니다. $A\mathbf{x} = \mathbf{b}$를 이차 함수 $\phi(\mathbf{x}) = \frac{1}{2}\mathbf{x}^T A\mathbf{x} - \mathbf{b}^T\mathbf{x}$의 최솟값 문제로 봅니다.

알고리즘:

  1. $\mathbf{r}_0 = \mathbf{b} - A\mathbf{x}_0$, $\mathbf{p}_0 = \mathbf{r}_0$
  2. $\alpha_k = \frac{\mathbf{r}_k^T \mathbf{r}_k}{\mathbf{p}_k^T A \mathbf{p}_k}$
  3. $\mathbf{x}_{k+1} = \mathbf{x}_k + \alpha_k \mathbf{p}_k$
  4. $\mathbf{r}_{k+1} = \mathbf{r}_k - \alpha_k A \mathbf{p}_k$
  5. $\beta_k = \frac{\mathbf{r}_{k+1}^T \mathbf{r}_{k+1}}{\mathbf{r}_k^T \mathbf{r}_k}$
  6. $\mathbf{p}_{k+1} = \mathbf{r}_{k+1} + \beta_k \mathbf{p}_k$

정확한 산술에서는 최대 $n$번 반복으로 정확한 해를 구합니다. 수렴 속도는 조건수에 의존합니다.

$$\frac{\|\mathbf{x}_k - \mathbf{x}^*\|_A}{\|\mathbf{x}_0 - \mathbf{x}^*\|_A} \leq 2\left(\frac{\sqrt{\kappa} - 1}{\sqrt{\kappa} + 1}\right)^k$$

고유값 계산

행렬 $A$의 고유값과 고유벡터를 수치적으로 구하는 방법입니다.

거듭제곱법 (Power Method)

절대값이 가장 큰 고유값(지배적 고유값, dominant eigenvalue) $\lambda_1$과 대응 고유벡터를 구합니다.

알고리즘:

  1. 임의의 초기 벡터 $\mathbf{v}^{(0)}$ 선택 (영벡터가 아닌)
  2. $\mathbf{w}^{(k+1)} = A\mathbf{v}^{(k)}$
  3. $\mathbf{v}^{(k+1)} = \frac{\mathbf{w}^{(k+1)}}{\|\mathbf{w}^{(k+1)}\|}$ (정규화)
  4. 고유값 근사: $\lambda \approx \frac{(\mathbf{v}^{(k+1)})^T A \mathbf{v}^{(k+1)}}{(\mathbf{v}^{(k+1)})^T \mathbf{v}^{(k+1)}}$ (레일리 몫)

수렴: $|\lambda_1| > |\lambda_2| \geq \cdots \geq |\lambda_n|$이면 수렴하며, 수렴 속도는 $\left|\frac{\lambda_2}{\lambda_1}\right|^k$에 비례합니다. $|\lambda_2/\lambda_1|$이 1에 가까우면 수렴이 느립니다.

역거듭제곱법 (Inverse Power Method): $A^{-1}$에 거듭제곱법을 적용하면, 절대값이 가장 작은 고유값을 구합니다. 이동(shift) $\sigma$를 도입하여 $(A - \sigma I)^{-1}$에 적용하면 $\sigma$에 가장 가까운 고유값을 구할 수 있습니다.

$$\text{역거듭제곱법 (이동 포함):} \quad (A - \sigma I)\mathbf{w}^{(k+1)} = \mathbf{v}^{(k)}, \quad \mathbf{v}^{(k+1)} = \frac{\mathbf{w}^{(k+1)}}{\|\mathbf{w}^{(k+1)}\|}$$

역멱법 (Inverse Power Method)

$A^{-1}$에 거듭제곱법을 적용하여 절대값이 가장 작은 고유값을 구합니다. 실제로는 역행렬을 구하지 않고, 매 반복에서 선형 시스템 $A\mathbf{w}^{(k+1)} = \mathbf{v}^{(k)}$를 풉니다.

이동이 있는 역멱법 (Shifted Inverse Iteration): 대략적인 고유값 추정 $\sigma$가 있을 때, $(A - \sigma I)^{-1}$에 거듭제곱법을 적용하면 $\sigma$에 가장 가까운 고유값에 빠르게 수렴합니다.

$$\text{수렴 속도} \sim \left|\frac{\lambda_{\text{target}} - \sigma}{\lambda_{\text{next}} - \sigma}\right|^k$$

$\sigma$가 정확할수록 수렴이 빨라지며, 레일리 몫 반복법에서는 매 반복마다 $\sigma$를 갱신하여 3차 수렴까지 달성할 수 있습니다.

QR 알고리즘

모든 고유값을 동시에 구하는 가장 강력한 방법입니다.

기본 QR 반복:

  1. $A_0 = A$
  2. $A_k = Q_k R_k$ (QR 분해)
  3. $A_{k+1} = R_k Q_k$ ($= Q_k^T A_k Q_k$, 닮음 변환이므로 고유값 보존)

$A_k$는 상삼각 행렬(슈어 형태)로 수렴하며, 대각 원소가 고유값이 됩니다.

실용적 개선:

고유값 수치 계산 비교

방법구하는 고유값수렴 속도연산 복잡도
멱법지배적 고유값 1개$|\lambda_2/\lambda_1|^k$스텝당 $O(n^2)$
역멱법최소 고유값 1개$|\lambda_{n-1}/\lambda_n|^k$스텝당 $O(n^2)$ + LU
이동 역멱법$\sigma$에 가장 가까운 1개매우 빠름스텝당 $O(n^2)$ + LU
QR 알고리즘모든 고유값3차 (이동 사용 시)총 $O(n^3)$
단계별 예시 — 멱법으로 지배적 고유값 구하기:

$A = \begin{pmatrix} 2 & 1 \\ 1 & 3 \end{pmatrix}$, $\mathbf{v}^{(0)} = (1, 1)^T$.

고유값은 $\lambda_1 = \frac{5+\sqrt{5}}{2} \approx 3.618$, $\lambda_2 = \frac{5-\sqrt{5}}{2} \approx 1.382$입니다.

$k$$A\mathbf{v}^{(k)}$$\mathbf{v}^{(k+1)}$ (정규화)레일리 몫
0$(3, 4)^T$$(0.600, 0.800)^T$$3.400$
1$(2.000, 3.000)^T$$(0.555, 0.832)^T$$3.600$
2$(1.942, 2.951)^T$$(0.549, 0.836)^T$$3.615$
3$(1.934, 2.957)^T$$(0.547, 0.837)^T$$3.618$

3회 반복만으로 지배적 고유값 $\lambda_1 \approx 3.618$에 수렴합니다.

최소제곱 문제

과결정(overdetermined) 시스템 $A\mathbf{x} \approx \mathbf{b}$ ($A$는 $m \times n$, $m > n$)에서 잔차 $\|\mathbf{b} - A\mathbf{x}\|_2$를 최소화하는 $\mathbf{x}$를 구합니다.

일상 비유 — 데이터에 가장 잘 맞는 직선 찾기:

실험에서 여러 데이터 점이 주어졌을 때, 모든 점을 정확히 지나는 직선은 존재하지 않을 수 있습니다. 대신 각 점까지의 "거리(오차)"의 제곱합을 최소화하는 직선을 찾는 것이 최소제곱법입니다. 회귀 분석, 곡선 맞춤(curve fitting) 등 데이터 분석의 근간이 됩니다.

정규방정식 (Normal Equations)

$$\boxed{A^T A \mathbf{x} = A^T \mathbf{b}}$$

$A^T A$가 양의 정부호이면 콜레스키 분해로 풀 수 있습니다.

문제점: $\kappa(A^T A) = \kappa(A)^2$이므로, $A$의 조건수가 크면 정규방정식은 수치적으로 불안정합니다.

QR 분해를 이용한 최소제곱

$A = QR$ (얇은 QR 분해)로 놓으면 최소제곱 해는

$$R\mathbf{x} = Q^T \mathbf{b}$$

$R$이 상삼각이므로 후진 대입으로 풀 수 있습니다. 조건수가 $\kappa(R) = \kappa(A)$이므로 정규방정식보다 안정적입니다.

특이값 분해(SVD)를 이용한 최소제곱

$A = U\Sigma V^T$로 분해하면 최소제곱 해는

$$\mathbf{x} = V\Sigma^+ U^T \mathbf{b}$$

여기서 $\Sigma^+$는 $\Sigma$의 유사역행렬(nonzero 대각 원소의 역수)입니다.

SVD의 장점:

최소제곱 풀이법 비교

방법연산 복잡도수치 안정성랭크 결핍 처리
정규방정식 ($A^TA$)$O(mn^2 + n^3/3)$낮음 ($\kappa^2$)불가
QR 분해$O(2mn^2)$높음 ($\kappa$)제한적
SVD$O(2mn^2 + 11n^3)$가장 높음완전 처리
단계별 예시 — 직선 피팅:

데이터 $(1, 2.1)$, $(2, 3.9)$, $(3, 6.2)$, $(4, 7.8)$에 $y = c_1 + c_2 x$를 맞춥니다.

$$A = \begin{pmatrix} 1 & 1 \\ 1 & 2 \\ 1 & 3 \\ 1 & 4 \end{pmatrix}, \quad \mathbf{b} = \begin{pmatrix} 2.1 \\ 3.9 \\ 6.2 \\ 7.8 \end{pmatrix}$$

정규방정식: $A^T A = \begin{pmatrix} 4 & 10 \\ 10 & 30 \end{pmatrix}$, $A^T\mathbf{b} = \begin{pmatrix} 20.0 \\ 56.9 \end{pmatrix}$

풀이: $c_1 = 0.05$, $c_2 = 1.96$. 따라서 $y \approx 0.05 + 1.96x$.

이산 푸리에 변환과 FFT

이산 푸리에 변환(DFT)은 이산 신호를 주파수 성분으로 분해합니다. 고속 푸리에 변환(FFT)은 DFT를 효율적으로 계산하는 알고리즘입니다.

이산 푸리에 변환 (DFT)

$N$개의 데이터 $\{x_0, x_1, \ldots, x_{N-1}\}$에 대해

$$\boxed{X_k = \sum_{n=0}^{N-1} x_n \, e^{-2\pi i \, kn/N}, \quad k = 0, 1, \ldots, N-1}$$

역변환:

$$x_n = \frac{1}{N}\sum_{k=0}^{N-1} X_k \, e^{2\pi i \, kn/N}$$

직접 계산하면 $O(N^2)$의 복소수 곱셈이 필요합니다.

FFT (Fast Fourier Transform) — 쿨리-튜키 알고리즘

$N = 2^m$일 때, DFT를 짝수 인덱스와 홀수 인덱스로 분할하여 재귀적으로 계산합니다.

$$X_k = \underbrace{\sum_{j=0}^{N/2-1} x_{2j} \, \omega^{2jk}}_{E_k \;(\text{짝수 부분})} + \omega^k \underbrace{\sum_{j=0}^{N/2-1} x_{2j+1} \, \omega^{2jk}}_{O_k \;(\text{홀수 부분})}$$

여기서 $\omega = e^{-2\pi i/N}$은 $N$차 단위근입니다.

나비(Butterfly) 연산:

$$X_k = E_k + \omega^k O_k, \quad X_{k+N/2} = E_k - \omega^k O_k$$

이 분할-정복에 의해 연산 복잡도가 $O(N \log N)$으로 줄어듭니다.

$N$DFT ($N^2$)FFT ($N \log_2 N$)가속비
$2^{10} = 1024$$1{,}048{,}576$$10{,}240$$\approx 100\times$
$2^{20} \approx 10^6$$\approx 10^{12}$$\approx 2 \times 10^7$$\approx 50{,}000\times$
FFT의 응용: 신호 처리(오디오, 영상), 다항식 곱셈의 고속화($O(n \log n)$), 큰 정수의 빠른 곱셈, 편미분방정식의 스펙트럼 해법, 상관 함수 계산 등.
FFT 나비 연산 (N=8, 첫 단계) $x_0$ $x_4$ $x_2$ $x_6$ $+1$ $-\omega^0$ $+1$ $-\omega^0$ 짝수 $X_k$ 짝수 $X_k$ 짝수 $X_k$ 짝수 $X_k$ 1단계 2단계

오차 분석 심화

수치 알고리즘의 신뢰성을 평가하기 위해 오차를 체계적으로 분석하는 심화 내용입니다.

전방 오차 분석 vs 후방 오차 분석

전방 오차 분석(Forward Error Analysis)은 각 연산 단계에서 발생하는 반올림 오차를 추적하여 최종 오차의 상한을 구합니다. 비관적인 상한을 주지만 실제 오차보다 크게 과대평가하는 경향이 있습니다.

후방 오차 분석(Backward Error Analysis)은 윌킨슨(Wilkinson)이 개발한 접근법으로, 계산된 결과를 약간 섭동된 입력에 대한 정확한 답으로 해석합니다.

일상 비유 — 전방 오차 vs 후방 오차:

과녁 맞추기에 비유하면, 전방 오차는 "내 화살이 과녁 중심에서 얼마나 벗어났는가?"이고, 후방 오차는 "과녁 중심을 내 화살이 꽂힌 곳으로 옮기면 얼마나 움직여야 하는가?"입니다. 알고리즘이 후방 안정하다는 것은 "과녁을 아주 조금만 옮기면 내 화살이 정중앙에 꽂힌 것이 된다"는 뜻입니다.

부동소수점 연산의 후방 오차

IEEE 754 산술에서 기본 연산의 후방 오차 모델:

$$\text{fl}(a \circ b) = (a \circ b)(1 + \delta), \quad |\delta| \leq \epsilon_{\text{mach}}, \quad \circ \in \{+, -, \times, \div\}$$

이 성질을 이용하면, 복잡한 알고리즘의 후방 안정성을 체계적으로 증명할 수 있습니다.

조건수 심화 — 다양한 문제에서의 조건수

문제조건수의미
$f(x) = x^n$ 의 평가$n$$n$이 클수록 민감
근 $f(x) = 0$의 단근$\frac{1}{|f'(x^*)|}$기울기가 작으면 민감
근 $f(x) = 0$의 중근 (중복도 $m$)$O(\epsilon^{1/m - 1})$매우 민감
선형 시스템 $Ax = b$$\kappa(A) = \|A\|\|A^{-1}\|$행렬 조건수
고유값 문제 $Ax = \lambda x$$\frac{1}{|\mathbf{y}^H \mathbf{x}|}$좌·우 고유벡터의 각도
악조건 문제의 예 — 힐베르트 행렬:

힐베르트 행렬 $H_{ij} = \frac{1}{i+j-1}$은 대표적인 악조건 행렬입니다.

차원 $n$$\kappa_2(H)$잃는 유효숫자
5$4.8 \times 10^5$약 6자리
10$1.6 \times 10^{13}$약 13자리
15$\approx 10^{17}$배정밀도로 풀 수 없음

수치 안정성의 계층

전방 오차 ≤ 조건수 × 후방 오차 입력 공간 $x$ $x+\Delta x$ 후방 오차 $f$ (조건수 $\kappa$) 출력 공간 $f(x)$ $\hat{f}(x)$ 전방 오차 전방 오차 ≤ $\kappa$ × 후방 오차

수치해석 핵심 정리

주제핵심 공식/방법주요 특성
부동소수점$\text{fl}(x) = x(1 + \delta)$, $|\delta| \leq \frac{\epsilon_{\text{mach}}}{2}$유한 정밀도의 근본 한계
오차 분석전방 오차 $\leq$ 조건수 $\times$ 후방 오차후방 안정성이 알고리즘 설계 목표
뉴턴법$x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}$이차 수렴 (단근)
라그랑주 보간$P_n(x) = \sum y_i L_i(x)$$n+1$점 $\to$ $n$차 다항식
3차 스플라인구간별 3차 다항식, $C^2$ 연속룽게 현상 방지
리처드슨 외삽$D_{\text{imp}} = \frac{4D(h/2) - D(h)}{3}$정확도 $O(h^2) \to O(h^4)$
심프슨 공식$\frac{h}{3}[f_0 + 4f_1 + 2f_2 + \cdots + f_n]$오차 $O(h^4)$
가우스 구적법$\sum w_i f(x_i)$, 최적 노드$n$점으로 $2n-1$차 정확
RK4$y_{n+1} = y_n + \frac{h}{6}(k_1+2k_2+2k_3+k_4)$4차, 범용적
적응적 RK45임베디드 4-5차 쌍자동 스텝 크기 제어
LU 분해$PA = LU$$O(n^3)$ 분해, $O(n^2)$ 풀이
켤레 기울기법$\mathbf{x}_{k+1} = \mathbf{x}_k + \alpha_k \mathbf{p}_k$SPD 행렬, $O(n\sqrt{\kappa})$
QR 알고리즘$A_{k+1} = R_k Q_k$ 반복모든 고유값, $O(n^3)$
거듭제곱법$\mathbf{v}^{(k+1)} = \frac{A\mathbf{v}^{(k)}}{\|A\mathbf{v}^{(k)}\|}$지배적 고유값
최소제곱 (SVD)$\mathbf{x} = V\Sigma^+ U^T \mathbf{b}$가장 안정적, 랭크 결핍 처리
FFT분할-정복 DFT$O(N^2) \to O(N\log N)$

참고자료