logo

명시적 룽게-쿠타 메소드 📂수치해석

명시적 룽게-쿠타 메소드

개요

상미분 방정식 솔버ODE solver인 룽게-쿠타 메소드를 소개한다. 흔히 사용되는 4차 룽게-쿠타 메소드 RK4에 대한 구체적인 설명은 글이 따로 발행되어있다.

빌드업1

다음과 같이 주어진 상미분 방정식을 생각하자. yytt에 대한 함수이며, ^{\prime}tt에 대한 미분을 의미한다. y=f(t,y),tt0,y(t0)=y0 y^{\prime} = f(t,y),\quad t \ge t_{0},\quad y(t_{0}) = y_{0} 이를 tnt_{n}부터 tn+1=tn+ht_{n+1} = t_{n} + h까지 적분하면(헷갈리므로 적분 변수는 tt 대신 τ\tau로 두자), tntn+1ydτ=tntn+1f(τ,y)dτ \int_{t_{n}}^{t_{n+1}}y^{\prime}d\tau = \int_{t_{n}}^{t_{n+1}} f(\tau,y)d\tau 좌변을 정리하고 τtn+hτ\tau \equiv t_{n} + h\tau로 치환하면 다음의 식을 얻는다. [y(τ)]tntn+1=tntn+1f(τ,y)dτ \big[y(\tau)\big]_{t_{n}}^{t_{n+1}} = \int_{t_{n}}^{t_{n+1}} f(\tau,y)d\tau y(tn+1)=y(tn)+tntn+1f(τ,y)dτ=y(tn)+h01f(tn+hτ,y(tn+hτ))dτ \Downarrow \\ y(t_{n+1}) = y(t_{n}) + \int_{t_{n}}^{t_{n+1}} f(\tau,y)d\tau = y(t_{n}) + h\int_{0}^{1} f\big(t_{n} + h\tau,y(t_{n} + h\tau)\big)d\tau

이제 뒤의 적분을 합으로 근사하여 다음의 식을 얻는다.

y(tn+1)=y(tn)+hj=1νbjf(tn+cjh,y(tn+cjh)),n=0,1,2,(1) y(t_{n+1}) = y(t_{n}) + h\sum_{j=1}^{\nu} b_{j} f\big(t_{n} + c_{j}h,y(t_{n} + c_{j}h)\big),\quad n=0,1,2,\cdots \tag{1}

이는 yn=y(tn)y_{n} = y(t_{n})을 알 때, yn+1=y(tn+1)y_{n+1} = y(t_{n+1})을 알 수 있는 근사식이다. 물론 우변에 모르는 값인 y(tn+cjh)y(t_{n} + c_{j}h)가 포함되어 있으니 이도 근사해야한다. 식이 복잡하므로 j=1,2,,νj = 1,2,\dots,\nu에 대해서 다음과 같이 표기하자.

ξj=y(tn+cjh) \xi_{j} = y(t_{n} + c_{j}h)

우선 c1=0c_{1} = 0이라 두자. 그러면 ξ1=yn\xi_{1} = y_{n}이므로 아는 값이다. 이제 멀티스텝 메소드를 적용하여 ξj\xi_{j}들을 다음과 같이 순차적으로 근사한다고 하자.

ξ2=y(tn+c2h)=yn+ha2,1f(tn+c1h,yn+c1h)=yn+ha2,1f(tn,yn)(c1=0)=yn+ha2,1f(tn,ξ1)(ξ1=yn)ξ3=y(tn+c3h)=yn+ha3,1f(tn+c1h,yn+c1h)+ha3,2f(tn+c2h,yn+c2h)=yn+ha3,1f(tn,ξ1)+ha3,2f(tn+c2h,ξ2)ξν=yn+hj=1n1aν,jf(tn+cjh,ξj) \begin{align*} \xi_{2} &= y(t_{n} + c_{2}h) \\ &= y_{n} + h a_{2,1}f(t_{n} + c_{1}h, y_{n} + c_{1}h) \\ &= y_{n} + h a_{2,1}f(t_{n}, y_{n}) & (\because c_{1} = 0)\\ &= y_{n} + h a_{2,1}f(t_{n}, \xi_{1}) & (\because \xi_{1}=y_{n}) \\[2em] \xi_{3} &= y(t_{n} + c_{3}h) \\ &= y_{n} + h a_{3,1}f(t_{n} + c_{1}h, y_{n} + c_{1}h) + h a_{3,2}f(t_{n} + c_{2}h, y_{n} + c_{2}h) \\ &= y_{n} + h a_{3,1}f(t_{n}, \xi_{1}) + h a_{3,2}f(t_{n} + c_{2}h, \xi_{2}) \\ &\vdots \\ \xi_{\nu} &= y_{n} + h\sum_{j=1}^{n-1}a_{\nu,j} f(t_{n} + c_{j}h, \xi_{j}) \end{align*}

이제 (1)(1)의 우변의 값 yny_{n}, f(tn,ξ1)f(t_{n}, \xi_{1}), f(tn+c2h,ξ2)f(t_{n} + c_{2}h, \xi_{2}), \dots, f(tn+cj1h,ξj1)f(t_{n} + c_{j-1}h, \xi_{j-1})들을 모두 구한 셈이다. 명시적 룽게-쿠타explicit Runge-Kutta, ERK 메소드는 yn+1y_{n+1}의 값을 yny_{n}, f(tn,ξ1)f(t_{n}, \xi_{1}), f(tn+c2h,ξ2)f(t_{n} + c_{2}h, \xi_{2}), \dots, f(tn+cj1h,ξj1)f(t_{n} + c_{j-1}h, \xi_{j-1})의 선형결합으로 근사하여 얻는 방법을 말한다.

정의

명시적 룽게-쿠타 메소드란, 주어진 yny_{n}에 대해서 yn+1y_{n+1}을 다음과 같이 근사하는 방법이다.

yn+1=yn+hj=1νbjf(tn+cjh,ξj),n=0,1,2,(2) y_{n+1} = y_{n} + h\sum_{j=1}^{\nu} b_{j} f(t_{n} + c_{j}h, \xi_{j}),\quad n=0,1,2,\cdots \tag{2}

여기서 각각의 ξj\xi_{j}는,

ξ1=ynξ2=yn+ha2,1f(tn,ξ1)ξ3=yn+ha3,1f(tn,ξ1)+ha3,2f(tn+c2h,ξ2)ξν=yn+hi=1ν1aν,if(tn+cih,ξi) \begin{align*} \xi_{1} &= y_{n} \\ \xi_{2} &= y_{n} + ha_{2,1}f(t_{n}, \xi_{1}) \\ \xi_{3} &= y_{n} + ha_{3,1}f(t_{n}, \xi_{1}) + ha_{3,2}f(t_{n} + c_{2}h, \xi_{2}) \\ \vdots & \\ \xi_{\nu} &= y_{n} + h\sum_{i=1}^{\nu-1}a_{\nu, i}f(t_{n} + c_{i}h, \xi_{i}) \end{align*}

이때 ν×ν\nu \times \nu 행렬 A=[aj,i]A = [a_{j,i}]룽게-쿠타 행렬RK matrix이라 한다. 수식에서 비어있는 성분은 00이다.

A=[aj,i]=[a2,1a3,1a3,2aν,1aν,2aν,ν1] A = [a_{j,i}] = \begin{bmatrix} \\ a_{2,1} & \\ a_{3,1} & a_{3,2} \\ \vdots & \\ a_{\nu,1} & a_{\nu,2} & \cdots & a_{\nu,\nu-1} & \end{bmatrix}

또한 아래의 b\mathbf{b}c\mathbf{c}를 각각 RK 웨이트RK weights, Rk 노드RK nodes라 한다.

b=[b1b2bν]andc=[c1c2cν] \mathbf{b} = \begin{bmatrix} b_{1} \\ b_{2} \\ \vdots \\ b_{\nu} \end{bmatrix} \quad \text{and} \quad \mathbf{c} = \begin{bmatrix} c_{1} \\ c_{2} \\ \vdots \\ c_{\nu} \end{bmatrix}

또한 (2)(2)ν\nu 스테이지ν\nu stages를 가진다고 말하며, 이러한 방법을 ν\nu 스테이지(혹은 ν\nu 차) 룽게-쿠타 메소드라 한다.

설명

정의에 따라 자명하게도 RK 행렬은 하삼각행렬이다.

위의 방법에 따라서, ξj\xi_{j}ξ1\xi_{1}부터 ξν\xi_{\nu}까지 순차적으로 계산할 수 있다. 그러면 결과적으로 (2)(2)를 계산할 수 있고, yn+1y_{n+1}을 얻는다. 이를 반복하여 다음 스텝에서의 yyyn+2y_{n+2}, yn+3y_{n+3}, \dots 들을 구할 수 있다.

RK 메소드에서 계수들 aj,ia_{j,i}, bjb_{j}, cjc_{j}들은 구하는 것이 아니라 선택하여 사용하는 것이다. 계수는 cAbt\begin{array}{c|c} \mathbf{c} & A \\ \hline & \mathbf{b}^{t} \end{array}와 같은 꼴로 표기하는데 이를 RK 테이블RK tableaux라 한다. 흔히 사용되는 RK4의 RK 테이블은 다음과 같다.

012121201210010016131316 \begin{array}{c|cccc} 0 & \\[0.5em] \frac{1}{2} & \frac{1}{2} \\[0.5em] \frac{1}{2} & 0 & \frac{1}{2} \\[0.5em] 1 & 0 & 0 & 1 \\[0.5em] \hline {\displaystyle {\color{white}\dfrac{0}{0}}} & \frac{1}{6} & \frac{1}{3} & \frac{1}{3} & \frac{1}{6} \end{array}

같이보기


  1. Arieh Iserles, A First Course in the Numerical Analysis of Differential Equations (2nd Edition, 2009), p38-41 ↩︎