Month: January 2010

Explicit method와 Implicit method

numerical analysis의 한 영역인 differential equation solving에 대한 explicit method와 implicit method 두 방식에 대한 간단한 글입니다.

시간이 난다면, 실험과 함께 포스팅을 이어가도록 하겠습니다.

특정한 differential equation을 풀기 위한 방법은 수없이 많다.(자기가 지어내면 그것이 또 다른 한 방법 ^^) 그 많은 방법을 분류할 수 있는 기준 중에 강력한 하나가 바로 explicit 형식이냐, 아니면 implicit형식이냐 이다.

풀고자 하는 1계 differential equation을

f(t, y(t)) = dy/dt (t)

이라고 할 때, explicit method는 dt시간 후의 y값을 구하기 위해

y(t + dt) = y(t) + dy/dt(t) dt = y(t) + f(t, y(t))dt

에서 y(t + dt)를 구하고, implicit method는

y(t + dt) = y(t) + dy/dt(t + dt)dt = y(t) + f(t + dt, y(t + dt))dt

에서 y(t + dt)를 구한다.

보다시피, implicit method의 경우 좌변의 argument로 아직 값이 ‘결정되지 않은’ y(t + dt)꼴이 들어가기 때문에, 이를 newton method 혹은 더욱 간단한 근사를 사용해 나타내기도 한다.

여기에서, implicit method의 경우에는 근사를 explicit method보다 ‘어쩔 수 없이’ 한 번 더 사용할 수밖에 없구나! 라는 것을 알게 된다. 그렇다면 그 결과도 implicit method가 explicit method보다 더 못하리라는 예측을 할 수 있을것이다.

하지만 실상은 정 반대이다.

많은 예제에서 explicit method를 통해 구한 해는 발산한다. 가장 간단한 예로는 용수철상수가 매우 큰 용수철의 시뮬레이션이 있다. dt를 어느 정도 작게 하지 않는 한, |y(t + dt)| > |y(t)|가 되버린다. 이 외에도 전혀 ‘발산하리라고 생각지 않았던’ 부분에서, explicit method는 시간이 가면서 아주 빠르게 발산하는 것을 볼 수 있다. 값이 발산해 버리는 것은 시뮬레이터의 입장으로써는 바람직하지 않을 것이다.

하지만 implicit method에서는 반대로 수렴한다. 그 이유는 다음과 같다 : 이론적으로, implicit method는 시간을 거꾸로 돌리는 explicit method와 동일하기 때문이다. (물론 y(t + dt)를 구하면서 근사의 방법을 쓰기에 time-reversed explicit method와 완전히 동일하지는 않겠지만) 시간이 0으로 갈수록 발산하기에, 시간이 infinite로 갈수록 수렴하게 된다.(실제 implicit method로 시뮬레이션을 step by step으로 보면 아마 납득이 갈텐데.. 참고로 정말 신기하다)

implicit method로 구한 답은 (정답에 가까워지든 멀어지든) 어느 방향으로든 수렴하기 때문에 시뮬레이터로써는 안정성을 갖출 수 있다.

여기까지가 어느 정도 정리한 글이다.

그럼 여기서 질문 :

‘답에 멀어지든 답으로 수렴하든, explicit method로 풀었을 때 어떻게든 수렴하는 미분방정식은 없을까?’

‘그래서, implicit method로 풀었을 경우 발산해버리는 미분방정식은 없을까?’

deb과 rpm 변환기, alien

deb과 rpm을 변환하고 싶을 때, alien이란 프로그램을 사용하면 된다.

Fedora에서는 따로 yum으로 제공하지 않으므로, google에서 tar.gz파일을 다운받아 컴파일 하면 된다.

설치 과정은, 압축을 푼 후

su

perl Makefile.PL ; make ; make install

을 입력해주면 된다.

* alien을 설치하기 전에, 반드시 yum install perl-devel을 해 줄 것.