logo

상미분방정식의 시간을 거꾸로 푸는 트릭 📂수치해석

상미분방정식의 시간을 거꾸로 푸는 트릭

메서드

dydt=f(y) {\frac{ d y }{ d t }} = f(y) 위와 같이 주어진 상미분방정식을 풀기 위한 수치적인 솔버 KK 가 미래의 시점 T>0T > 0 와 초기값 y0y_{0} 에 대해 K(f,T,y0)={y(t):t[0,T]} K \left( f , T , y_{0} \right) = \left\{ y(t) : t \in [0, T] \right\} 와 같이 작동한다고 가정하자. 반대로 S>0S > 0 만큼 과거의 시점에 대해 {y(s):s[S,0]}\left\{ y(s) : s \in [-S, 0] \right\} 을 얻고 싶다면, K(f,S,y0)K \left( -f , S , y_{0} \right) 를 계산하면 된다.

설명

위에서 소개된 트릭은 솔버가 어떤 형태든 시간을 과거로 보내는 방법을 다루고 있다. 시간을 과거로 돌린다는 것은 특히 동역학계의 분석에서 불안정고정점을 찾는 등의 작업에서 유용하게 쓰인다.

트릭의 핵심은, 시간을 거꾸로 흐르게 하는 방법이 아주 간단하게도 ff 대신 f-f 를 쓰면 될 뿐이라는 점이다.

모티브

f(y)=dydt=limh0y(t+h)y(t)h    y(t+h)y(t)+hf(y) \begin{align*} & f(y) = {\frac{ d y }{ d t }} = \lim_{h \to 0} {\frac{ y(t + h) - y(t) }{ h }} \\ \implies & y (t + h) \approx y(t) + h f(y) \end{align*} 예로써 오일러 메서드를 생각해보면, 충분히 작은 hh 에 대해 위와 같은 근사로 유도된다. 그런데 미분계수 y˙\dot{y} 의 정의에 따르면 사실 그 분자는 꼭 y(t+h)y(t)y(t + h) - y(t) 가 아니라 y(t)y(th)y(t) - y(t - h) 이어도 전혀 문제가 없어야 하고, 그렇다면 다음과 같은 계산도 가능하다. f(y)=dydt=limh0y(t)y(th)h    y(th)y(t)hf(y)=y(t)+h(f(y)) \begin{align*} & f(y) = {\frac{ d y }{ d t }} = \lim_{h \to 0} {\frac{ y(t) - y(t - h) }{ h }} \\ \implies & y (t - h) \approx y(t) - h f(y) = y(t) + h \cdot \left( - f (y) \right) \end{align*} 이러한 과거 방향으로의 풀이는 오일러 메서드를 KK 라고 했을 때 사실 K(f,h,y0)K \left( -f , h , y_{0} \right) 를 구하는 것이나 마찬가지다.

변수 치환

그러나 KK 가 오일러 메서드가 아닐 땐 위와 같은 직관만으로 결과를 도출하기 어렵다. 이 일반화를 s=ts = -t 와 같은 변수 치환으로 설명하려고 한다. 여기서 ss 가 양의 방향 S>0S > 0 을 향해 커진다는 것은 tt 가 음의 방향으로 움직인다는 것, 다시 말해 시간 tt 가 거꾸로 흐른다는 것을 의미한다. 그렇다면 원래의 상미분방정식 y˙=f(y)\dot{y} = f(y)체인룰에 따라 다음과 같이 쓸 수 있다. dydt=f(y)    dydsdsdt=f(y)    dyds=f(y)    y=f(y) \begin{align*} & {\frac{ d y }{ d t }} = f(y) \\ \implies & {\frac{ d y }{ d s }} {\frac{ d s }{ d t }} = f(y) \\ \implies & {\frac{ d y }{ d s }} = - f(y) \\ \implies & y ' = - f(y) \end{align*} 이는 형식적으로 g=fg = - f 에 대해 y=g(y)y ' = g (y) 를 푸는 것과 다르지 않고, 결국 ff 의 부호만 반전시켜서 원래의 메서드 KK 를 적용하는 것과 같다.