점화식에서 차분방정식까지
최근에 문득 과외를 하다가 점화식에 대해 이것저것 가르쳐주다가, 뭔가 스스로 꽂혀 버렸다.
그러다가 **차분방정식(Difference Equation)**으로까지 흘러갔는데,
이 기회에 여기서 정리한 생각들을 좀 기록해보려고 한다.
---
1. 재귀와 이산적 사고
어찌 보면, **점화식(Recurrence Relation)**은 가장 간단하고 직관적인 형태의 재귀적 사고라고 할 수 있다.
어떤 수열이 있는데, 이것의 일반항이 직관적으로 보이지 않을 때, 임의의 상태를 마치 현미경으로 확대해 보듯
“지금 상태가 이전 상태들과 어떤 관계로 이어져 있는가?”를 탐구하는 것이다.
- 예시를 들어보자.
고전 중의 고전인 피보나치 수열:
\[
F_{n} = F_{n-1} + F_{n-2}, \quad F_{0} = 0,\; F_{1} = 1
\]
여기서 \(n\ge 2\)에 대해 위 같은 점화식이 성립하고, 이로부터 \(\{F_n\}\)이 쭉 전개된다.
이 아이디어, 즉 “현 시점이 바로 앞 시점이나 그 이전 시점들과 연결되어 있다”는 개념은,
**동적 프로그래밍**(Dynamic Programming)부터 **분할정복 알고리즘**까지 다양한 분야에서 핵심으로 쓰인다.
조금 더 일반화된 형태를 고민하면, 자연스럽게 **차분방정식**이라는 틀로 넘어가게 된다.
이건 사실 **이산화(Discretization)**된 미분방정식이랄까,
“연속적인 시간축 대신 특정 단계별로 상태가 어떻게 바뀌는가?”를 공식으로 정리해보자는 것이다.
- 예컨대, **생태학**에서 개체군의 변화를
\[
x_{n+1} = r \, x_n \, (1 - x_n)
\]
같이 로지스틱 맵(Logistic Map) 형태로 표현할 수도 있다.
경제학에서도 한 시점의 지표(GDP, 물가 등)가 다음 시점 지표를 결정한다는 식으로 써먹는다.
---
2. 행렬 표현 & 고유값, 그리고 생성함수
이걸 “조금 더 수학적으로 제대로” 다루고 싶으면,
**행렬 표현**을 쓰면 깔끔해진다.
2.1 행렬로 나타내기
예를 들어, 2차 점화식
\[
y_{n} = 2y_{n-1} + y_{n-2}
\]
을 행렬로 표현하면,
$$
\begin{pmatrix}
y_n \\
y_{n-1}
\end{pmatrix}
=
\begin{pmatrix}
2 & 1 \\
1 & 0
\end{pmatrix}
\begin{pmatrix}
y_{n-1} \\
y_{n-2}
\end{pmatrix}.
$$
이걸 반복 적용하면
\[
\mathbf{Y}_n \;=\; \mathbf{A} \,\mathbf{Y}_{n-1} \;=\; \mathbf{A}^2 \mathbf{Y}_{n-2} \;=\; \dots \;=\; \mathbf{A}^n \mathbf{Y}_0
\]
이런 식으로 정리되는데, 여기서
\[
\mathbf{A} =
\begin{pmatrix}
2 & 1 \\
1 & 0
\end{pmatrix},
\quad
\mathbf{Y}_n =
\begin{pmatrix}
y_n \\
y_{n-1}
\end{pmatrix}.
\]
2.2 고유값분해(Eigenvalue Decomposition)
\(\mathbf{A}^n\)을 계산하기 위해 **고유값분해**를 쓰면 훨씬 편하다.
\(\mathbf{A}\)의 고유값 \(\lambda_1, \lambda_2\)와 고유벡터 \(\mathbf{v}_1, \mathbf{v}_2\)를 찾고,
\[
\mathbf{A} = \mathbf{P} \, \mathbf{\Lambda} \, \mathbf{P}^{-1},
\quad
\mathbf{\Lambda} = \mathrm{diag}(\lambda_1, \lambda_2),
\quad
\mathbf{P} = [\mathbf{v}_1 \;\mathbf{v}_2],
\]
이렇게 쓰면,
\[
\mathbf{A}^n = \mathbf{P} \, \mathbf{\Lambda}^n \, \mathbf{P}^{-1}
\]
에서 \(\mathbf{\Lambda}^n\)은 단순히 대각원소 \(\lambda_1^n, \lambda_2^n\)를 쓰는 거라 빠르게 계산할 수 있다.
그러면 \(y_n\)도 고유값 \(\lambda_1^n, \lambda_2^n\) 조합으로 일반해를 깔끔하게 구할 수 있다는 점이 핵심이다.
2.3 생성함수(Generating Function)
또 다른 편한 방법은 **생성함수**를 쓰는 것이다.
어떤 수열 \(\{y_n\}\)의 생성함수를
\[
G(z) = \sum_{n=0}^{\infty} y_n \, z^n
\]
라고 두고, 점화식을 적용해보면,
연속적인 미분방정식을 라플라스 변환으로 풀 듯,
**이산적인 차분방정식을 생성함수로 한 방에** 풀어낼 수 있다.
예를 들어,
\[
y_n - 3y_{n-1} + 2y_{n-2} = 0
\]
같은 2차 동차(linear homogeneous) 차분방정식이면,
\[
G(z) = \sum_{n=0}^{\infty} y_n z^n
\]
를 놓고 양변에 끼워넣어 펼치다 보면,
\[
G(z) = \frac{\text{(초기조건에 따른 표현)}}{1 - 3z + 2z^2}
\]
처럼 유리함수(Rational function)가 나오고, 이를 부분분수 분해하면 결국
\[
y_n = A \,\alpha^n + B \,\beta^n
\]
형태로 떨어지는 식이다. (\(\alpha, \beta\)는 해당 다항식의 근)
---
3. 자연, 그리고 이산적 모델링
현실 세계의 많은 데이터들은 생각보다 **이산적으로 주어진다**.
예를 들어 **분기별 GDP**, **주간 판매량**, **하루 단위로 찍어낸 센서값** 등등.
이걸 굳이 연속적인 미분방정식으로 모델링하지 않아도,
차분방정식은 **“이전 단계에서 다음 단계로 넘어가는 규칙”**을 나타내기에 딱이다.
사실 이건 **재귀**(Recursion)의 기본 사유 방식이기도 하다.
“한 번에 전부 풀기 힘든 문제를 작게 쪼개서, 이전 결과 + 추가 작업 = 현재 결과”
라는 아이디어. 알고리즘도 그렇고, 인간의 생각 과정도 흔히 그렇지 않나.
---
4. 마무리
결국 **차분방정식**이라는 프레임은,
“시간을 이산적으로 나눠서 현재 상태를 과거와 연결 짓고, 거기서 미래를 예측한다”는
가장 기본적이면서도 강력한 아이디어라고 느낀다.
그리고 이걸 수학적으로 파고들면,
**행렬 \(\mathbf{A}\)와 고유값분해**, **생성함수** 등 짜임새 있는 기법들이 등장해서
여러 가지 문제를 깔끔하게 풀어갈 수 있다.
물론 실제 데이터는 더 복잡할 수 있고,
비선형 항이나 무작위성(확률 차분방정식) 같은 게 들어오면 머리가 복잡해지기도 한다.
그럼에도 불구하고 “단계적으로 파악한다”는 관점 자체는 크게 흔들리지 않는다.
이번에 과외 중에 나온 이야기에서 시작해
점화식 → 차분방정식 쪽으로 흐름이 이어졌는데,
아직도 완벽하게 정리가 끝난 건 아니지만,
그래도 이렇게 **재귀적 사고 + 이산적 관점**이라는 나름의 중간결과에 도달했다.
아무튼, “차분방정식”이라는 키워드가 현재 내 머릿속에 맴도는 중이기에,
기록 차원에서 짤막하게나마 블로그에 남겨둔다.