verlet 알고리즘 : 유도과정과 의미

Posted by wbpark
2017. 8. 26. 22:08 물리 수학


verlet 알고리즘이란?
분자운동학에서 미시계의 위치와 운동량을 수치적으로 구할 때 쓰는 알고리즘으로, 테일러전개과 뉴턴 방정식을 사용해 만들어졌습니다. 타임 스텝이 $dt$일 때, 어떤 물체의 현재의 위치와($x_t$) 과거의 위치($x_{t-dt}$), 그리고 작용하는 힘($F_t$)을 알면, 그 다음 순간의 위치($x_{t+dt}$)를 계산할 수 있습니다.

기본 아이디어
  1) $x_{t+dt}$를 $t$에서 테일러전개한다.
  2) $x_{t-dt}$를 $t$에서 테일러전개한다.
  3) 위의 두 전개식을 합치고, 뉴턴방정식을 대입한다.
$$\large{x_{t+dt}=2x_t-x_{t-dt}+\frac{F_t}{m} (dt)^2+O(dt)^4}$$

유도과정
어떤 함수 $f$를 $x=a$근처에서 테일러전개하면 다음과 같이 나타납니다. 
$$f{(x)} = f(a) + \frac{f'(a)}{1!}(x-a)+ \frac{f''(a)}{2!}(x-a)^2+\cdots \frac{f^{(n)} (a)}{n!}(x-a)^n \cdots \tag1$$

(1) 식에서 상수$a$를 $t$로 치환하고, $(x-a)$는 매우 작은 값이므로 적당히 $dt$로 치환합니다. 이때 $x>a$입니다.
$$f{(t+dt)} = f(t) + \frac{f'(t)}{1!}(dt)+ \frac{f''(t)}{2!}(dt)^2+\cdots \frac{f^{(n)} (t)}{n!}(dt)^n \cdots \tag2$$
(2)식은 (1)식에서 $x$에 관련된 모든 문자를 $t$에 관한 문자로 치환한 것입니다. 이것은 함수$f$의 정의역($x$)을 시간의 차원을 갖는 변수($t$)로 선언한 것입니다. 이 식의 특이한 점은 변수의 역할을 할 수 있는 문자는 $t$가 아니라 $dt$라는 것 입니다. 왜냐하면 테일러전개의 기준으로 잡았던 점 $a$는 $t$로 치환되었고, 정의역의 변수$x$는 a만큼 평행이동한 후 $dt$로 치환되었기 때문입니다.

$x<a$인 경우에는 $(x-a)$를 $(-dt)$ 치환합니다.
$$f{(t-dt)} = f(t) - \frac{f'(t)}{1!}(dt)+ \frac{f''(t)}{2!}(dt)^2 +\cdots (-1)^n \frac{f^{(n)} (t)}{n!}(dt)^n \cdots \tag3$$
(2)식과 (3)을 더하면 n의 홀수 항들을 없애줍니다. 
$$f(t+dt)+f(t-dt) = 2f(t) + 2\frac{f''(t)}{2!}(dt)^2+ 2\frac{f^{(4)}(t)}{4!}(dt)^4 +\cdots \tag4$$
이제 함수 $f$를 위치에 대한 함수 $x$로 선언합니다. 처음부터 $x$라고 쓰면 정의역을 의미하는 $x$와 혼동이 될 수 있어 지금 바꿔줍니다. 그리고 $(dt)^4$는 매우 작아서 나중에 무시할 예정이니 4차 이상의 항을 일단 $O(dt^4)$로 나타내겠습니다. 
$$x_{t+dt} = 2x_t -x_{t-dt} + x''_t (dt)^2+ O(dt^4) \tag5$$
여기서 위치를 시간으로 두 번 미분한 항$x''_t$는 가속도를 의미합니다. 뉴텅방정식에 의해 가속도($a_t$)는 힘을 질량으로 나눈 값($F_t/m$)으로 표현됩니다. 
$$\large {x_{t+dt} = 2x_t -x_{t-dt} + \frac{F_t}{m}(dt)^2} \tag6$$

운동량과 관계
(6) 식을 적당히 정리하면 충격량과 운동량에 관계에 대한 식이 나옵니다. 
$$\large{m\frac{x_{t+dt}- x_t}{dt} = m\frac{x_t -x_{t-dt}}{dt} + F_t * dt \tag7}$$
$$\large{p_{t+dt} = p_{t}+F_t *dt} \tag8$$

운동방정식과의 관계
테일러 급수와 운동방정식은 깊은 연관이 있어보입니다. (2) 식을 살짝 수정하면 운동방정식이 나오기 때문입니다. $f$를 위치에 대한 함수라고 할 때, 상수항은 초기위치, 일차항은 속도, 이차항은 가속도, 삼차항 이상은 가속도의 변화에 대한 항입니다. ($f(t+dt)=x_t$ $f(t)=x_0$, $f'(t)=v_0$, $f''=a$) 등가속도 운동은 가속도의 변화가 없기 때문에 3차항 이상을 무시하고 (2)식에 대입하면 고등학교에서 배우는 등가속도 운동의 운동방정식이 나옵니다. 
$$x_t=x_0+v_0 t+\frac{1}{2}at^2 \tag9$$
이로부터 '위치를 시간에 대해 테일러전개한 식'이 의미하는 것은 '보다 일반적인 운동방정식'이라는 것을 알 수 있습니다. 

타임 스텝과 오차 
verlet 알고리즘의 정확도에 대해 살펴보겠습니다. (5)식에서 $O(dt^4)$가 verlet 알고리즘의 오차입니다. 오차의 핵심은 타임스텝의 크기입니다. 타임 스텝이 $n$배 커질수록 오차는 $\frac{n(n_1)}{2}$배 커집니다. 증명방법은 다음과 같습니다. $error(x_{t+n*dt})=a_n$이라 할 때 $a_{-1}=0$, $a_0=0$이고, (5) 식을 변형하여 점화식을 만들 수 있습니다. 이 수열을 정리하면 위 사실을 보일 수 있습니다. 
$$a_{n+1}=2a_{n}-a_{n-1} +O(dt^4) \tag10$$
$$a_n=error(x_{t+n*dt})=\frac{n(n+1)}{2} O(dt^4) \tag11$$

타임 스텝이 일정하지 않을 때
타임스텝이 일정하지 않은 상황에서는 (6) 식을 다음과 같이 바꿔쓰기도 합니다.
$$x_{i+1}=x_{i}+ (x_i - x_{i-1})\frac{dt_i}{dt_{i-1}} + a_i \frac{dt_i+dt_{i-1}}{2}dt_i \tag12$$
(12) 식은 조금 다른 방법으로 유도할 수 있습니다.  (2) 식에서 (3) 식을 빼고 $f$를 속도에 대한 함수로 선언하면 유도할 수 있습니다. 

마치며
verlet알고리즘의 유도과정과 오차, 그리고 운동방정식과의 관계를 살펴보았습니다. 필자는 모든 수학적인 테크닉은 물리적으로 의미가 있다고 믿습니다. 이 포스팅을 준비한 이유도 테일러전개식이 물리에서 어떤 의미가 있는지 생각해볼 수 있기 때문입니다. 앞으로 일차변환, 퓨리에변환, 라플라스변환 등 수학적인 기술로만 사용되는 수식이 물리적으로 어떤 의미가 있는지 포스팅해보려합니다. 긴 글 읽어주셔서 감사합니다. 

이 글에서 사용된 테일러 전개에 대해 궁금하시다면 [테일러전개]를 참고하세요!