logo

상미분방정식의 솔버 중 명시적 메서드보다 암시적 메서드가 권장되는 상황 📂수치해석

상미분방정식의 솔버 중 명시적 메서드보다 암시적 메서드가 권장되는 상황

개요

y˙=f(y) \dot{y} = f(y) 위와 같이 주어진 상미분방정식을 풀기 위한 수치적인 솔버는 그 계산 방식에따라 명시적 메서드explicit method암시적 메서드implicit method로 나뉜다. 일반적으로 명시적 메서드는 구현도 쉽고 사용하기도 간편하지만 암시적 메서드는 그 풀이가 복잡한 대신 비교적 문제를 조건을 가리지 않으며 안정적이다. 물론 항상 그런 것은 아니지만, 장단점을 떠나 암시적 메서드가 필요한 상황이 있다.

예시

tn+k=tn+khyn=y(yn) \begin{align*} t_{n+k} =& t_{n} + k h \\ y_{n} =& y \left( y_{n} \right) \end{align*} h>0h > 0 에 대해 타임 스텝 tnt_{n} 와 근사해 yny_{n} 을 위와 같이 두자.

예로써 오일러 메서드는 다음과 같이 전방 차분forward difference을 사용해서 유도할 수 있다. f(y)=y˙=limh0y(t+h)y(t)h    f(yn)1h[y(tn+1)y(tn)]    yn+1=yn+hf(yn) \begin{align*} & f(y) = \dot{y} = \lim_{h \to 0} {\frac{ y (t + h) - y(t) }{ h }} \\ \implies & f \left( y_{n} \right) \approx {\frac{ 1 }{ h }} \left[ y \left( t_{n+1} \right) - y \left( t_{n} \right) \right] \\ \implies & y_{n+1} = y_{n} + h f \left( y_{n} \right) \end{align*} 하지만 미분계수의 정의에서 이러한 유도는 후방 차분backward difference을 통해서도 다음과 같이 가능해야 한다. f(y)=y˙=limh0y(t)y(th)h    f(yn)1h[y(tn)y(tn1)]    yn=yn1+hf(yn) \begin{align*} & f(y) = \dot{y} = \lim_{h \to 0} {\frac{ y (t) - y(t - h) }{ h }} \\ \implies & f \left( y_{n} \right) \approx {\frac{ 1 }{ h }} \left[ y \left( t_{n} \right) - y \left( t_{n-1} \right) \right] \\ \implies & y_{n} = y_{n-1} + h f \left( y_{n} \right) \end{align*} 이렇게 얻어지는 업데이트 규칙 ynyn1+hf(yn)y_{n} \gets y_{n-1} + h f \left( y_{n} \right)암시적 오일러 메서드implicit Eular method라 하는데, 수학적인 유도 과정이야 문제 없지만 실제로 사용하기 위해서는 좌변의 yny_{n} 를 구하기 위해 우변에서 yny_{n} 을 알고 있어야 한다는 문제점이 있다. 명시적 오일러 메서드가 간단하게 순차적인 계산방식을 가진 것과 달리, 암시적 오일러 메서드는 매 스텝마다 이 방정식을 만족하는 yny_{n} 을 찾기 위해 뉴턴-랩슨 메서드 등의 기법을 사용해서 계산비용이 엄청나게 커지게 된다.

여기까지만 보면 명시적 메서드를 대신해서 암시적 메서드를 사용할 이유는 전혀 없어보인다.

명시적 메서드가 일으킬 수 있는 문제

그러나 명시적 메서드는 안정성이 취약한데, 주어진 미분방정식이 스티프stiff한 경우에는 명시적 메서드가 수렴하지 않을 수 있다. λ>0\lambda > 0 에 대해 다음과 같은 달키스트 문제를 생각해보자. y˙=λy \dot{y} = - \lambda y 이 방정식은 고등학생도 풀 수 있을 정도로 간단한 비자명해 y(t)=y0eλty (t) = y_{0} e^{-\lambda t} 를 가지고 있지만, 수치적으로는 명시적 메서드의 약점을 찌를 수 있다. 이 문제에 대한 명시적 오일러 메서드는 다음과 같이 주어진다. yn+1=ynhλyn=(1hλ)yn y_{n+1} = y_{n} - h \lambda y_{n} = \left( 1 - h \lambda \right) y_{n} 이론적으로 우리는 y0>0y_{0} > 0 일 때 이 방정식의 비자명해가 y(t)=y0eλt>0y (t) = y_{0} e^{-\lambda t} > 0 이라는 것을 알고 있지만 λ0\lambda \gg 0 인 경우, 다시 말해 yy 의 변화가 너무 극심한 경우에는 흔히 깔고 가는 가정인 ‘충분히 작은 hh‘가 충족되지 않을 수 있다. 이 경우 1hλ<01 - h \lambda < 0 이 되므로 yny_{n} 은 업데이트를 거칠 때마다 부호가 반전되어 실제 해와는 전혀 다른 양상을 보이며, (1hλ)<1\left( 1 - h \lambda \right) < -1 이면 심지어 수렴하지도 않게 된다.

암시적 메서드의 안정성

반면 같은 문제에 대한 암시적 오일러 메서드는 다음과 같이 주어진다. yn=yn1hλyn    (1+hλ)yn=yn1    yn=11+hλyn1 \begin{align*} y_{n} =& y_{n-1} - h \lambda y_{n} \\ \implies \left( 1 + h \lambda \right) y_{n} =& y_{n-1} \\ \implies y_{n} =& {\frac{ 1 }{ 1 + h \lambda }} y_{n-1} \end{align*} 실제로 수치적인 계산을 거치는 것과는 별개로, 암시적 메서드는 처음 주어진 y0y_{0} 에 항상 양수인 (1+hλ)1\left( 1 + h \lambda \right)^{-1} 을 곱하는 식으로 업데이트를 진행하므로 부호가 반전될 일이 없다.

이러한 현상은 잘 생각해보면 메서드가 가지는 근본적인 특성 때문에 발생함을 알 수 있다:

  • 명시적 메서드는 시스템의 조건이 다 만족되었다고 가정하고 yny_{n} 에 어떤 항을 더하는 식으로 계산하는데, 실제로는 그 ‘어떤 항’이 정말로 주어진 조건을 만족하는지에 대한 검증 없이 덧셈을 강행하기 때문에 문제가 일어날 수 있다.
  • 암시적 메서드는 애초에 한 스텝을 진행할 때마다 yny_{n} 이 주어진 근사식을 허용 오차tolerance 이내로 만족하는지를 기준으로 나아가기 때문에 한결 안정적일 수밖에 없다.