[수치해석] Numerical solution of ODE (7) Leap frog method

2022. 3. 15. 00:23·수치해석 Numerical Analysis

ODE에 대한 Introduction에서 적분을 할 때 정해놓은 $\Delta t$가 아니라 그 안에서 여러 스텝을 거쳐서 적분을 하는 방법은 substep method이고, $t^{n+1}$라는 미래 시간을 계산하기 위해 현재와 그 이전 스텝을 쓰는 것을 multi step method라고 했습니다.

 

이번 글과 다음 글에서 소개할 방법은 multi step method의 범주에 드는 방법들입니다.

 

위의 그림처럼 $\Delta t$ 간격의 시간에서 $t^{n-1}$ 등 과거 스텝도 사용합니다.

 

이 방법에는 몇 가지 단점이 있습니다.

첫 번째, timestep size가 고정됩니다.

두 번째, self starting이 불가능합니다. 즉, 초기 조건을 알아도 그 초기 조건을 현재로 생각했을 때 이전 스텝도 알아야합니다.

 

그러나 장점도 있습니다. 한 번의 계산으로도 꽤 높은 정확도를 보이기 때문에 계산이 적다는 것입니다. (cost minimization)

 

이러한 multi step 방법 중 Leap frog method를 소개하도록 하겠습니다.

 

$\begin{aligned}&y^{\prime}=f(y, t) \\&\frac{y^{n+1}-y^{n-1}}{2 \Delta t}=f\left(y^{n},t^{n}\right)+\theta(\Delta t^{2})\end{aligned}$

 

이 식을 정리하면

 

$y^{n+1}=y^{n-1}+2 \Delta t f\left(y^{n}, t^{n}\right)+\theta\left(\Delta t^{3}\right)$

 

다음과 같으므로 이 방법의 정확도(accuracy)는 locally 3rd order이고 globally 2nd order입니다.

과거의 값만 사용하는 방법이기 때문에 explicit method라고 할 수 있습니다. 함수 계산이 한 번만 있는데도 locally 3rd order이기 때문에 계산 cost가 적다고 볼 수 있습니다.

 

leap frog method를 분석하기 위해 이전에 했던 것과 마찬가지로 model problem을 살펴보겠습니다.

 

$y^{\prime}=\lambda y$ 라고 할 때 위의 방법에 대입을 하면 다음과 같다.
$y^{n+1}=y^{n-1}+\lambda \Delta t f^{n} \Rightarrow y^{n}=\sigma^{n} y^{0}$

왼쪽 식을 보고 오른쪽 식의 형태로 만들고 싶지만 그러기는 어렵기 때문에 역으로 오른쪽 식을 왼쪽에 대입하여 $\sigma$를 구할 수 있다. 참고로 $f^{n}$은 $f$를 n번 곱했다는 뜻이 아니라 $f(x^{n},t^{n})$을 의미합니다.

 

$\sigma^{n+1} y^{0}=\sigma^{n-1} y^{0}-2 \Delta t \lambda \sigma^{n} y^{0}$

 

이제 위 식에서 $y^{0}$를 제거하면 

$\sigma^{2}-2 \lambda \Delta t \sigma-1=0$

$\sigma=\lambda \Delta t \pm \sqrt{(\lambda \Delta t)^{2}+1}$

 

이렇게 2개의 $\sigma$를 구할 수 있습니다. $\sqrt{ (\lambda\Delta t)^{2} +1}$은 다항식으로 근사시킬 수 있습니다.

 

아주 옛날에 찾은 자료라서 어디에서 찾았는지 기억은 안나지만 위와 같이 근사가 가능합니다.

 

$\begin{aligned} \sigma_{1} &=\lambda \Delta t+1+\frac{1}{2}(\lambda \Delta t)^{2}-\frac{1}{8}(\lambda \Delta t)^{4}+\cdots \\ &=1+\lambda \Delta t+\frac{1}{2}(\lambda \Delta t)^{2}+\theta\left(\Delta t^{4}\right) \end{aligned}$

 

$\begin{aligned} \sigma_{2} &=\lambda \Delta t-1-\frac{1}{2}(\lambda \Delta t)^{2}+\frac{1}{8}(\lambda \Delta t)^{4}+\cdots \\ &=-1+\lambda \Delta t-\frac{1}{2}(\lambda \Delta t)^{2} +\theta\left(\Delta t^{4}\right) \end{aligned}$

 

여기서 Leap frog method의 문제점을 알 수 있습니다.

$\sigma_{2}$일 때를 가정하면

$y^{n}=(-1+\alpha)^{n}y^{0}$이고 이는 spurious(거짓된) solution입니다.

$\alpha$가 매우 작다고 했을 때 n에 따라서 $(-1)^{n}$이 음수였다가 양수였다가를 반복하기 때문입니다.

 

그렇게 되면 solution이 실제 결과와 달리 음수와 양수를 왔다갔다하는 모양새가 되므로 leaf frog 방법은 잘 사용하지 않는다고 합니다.

다만 저 $-1$의 영향을 없앨 수 있는 방법도 있습니다.

 

 

$y^{\prime}=\lambda y$
$y^{n+1}=y^{n-1}+\lambda \Delta t y^{n}$
$y^{n}=\left(c_{1} \sigma_{1}^{n}+c_{2} \sigma_{2}^{n}\right) y^{0}$

 

이 식을 이용해서 $n=0$일 때와 $n=1$일 때 연립을 합니다.

 

$\left.\begin{array}{ll}n=0 & y^{0}=c_{1}+c_{2} \\ n=1 & y^{1}=c_{1} \sigma_{1}+c_{2} \sigma_{2}\end{array}\right\} \quad \begin{array}{c}c_{1}=\frac{y^{1}-y^{0} \sigma_{2}}{\sigma_{1}-\sigma_{2}}\end{array}\quad c_{2}=\frac{-y^{1}+y^{0} \sigma_{1}}{\sigma_{1}-\sigma_{2}}=0$

$y^{0}-\sigma_{1} y^{\prime}=c_{2}\left(\sigma_{1}-\sigma_{2}\right)$

 

이 식에서 $c_{2}$를 보면 $c_{2}=0$일 때 $\sigma_{2}$의 영향이 없어지므로

$y^{1}=y^{0}\sigma_{1}$이면 됩니다.

하지만 긴 시간동안 적분을 하다보면 $\sigma_{1}$이 무한소수일 때 컴퓨터 상에서는 소수점 무한대까지 계산이 불가능해서 나중에는 솔루션이 망가지게 됩니다.

 

어쨌든, $\sigma$에 대해서 파악했으니 stability와 phase error에 대해서 알아보겠습니다.

 

$\lambda=\lambda_{R}+i\lambda_{I}$로 실수부와 허수부 모두 존재합니다.

만약 $\lambda=i\omega$, 즉 허수부만 존재하는 진동하는 시스템이라면 결과는 다음과 같습니다.

$\sigma_{1}=\lambda \Delta t+\sqrt{(\lambda \Delta t)^{2}+1}=\left|i \omega \Delta t+\sqrt{1-\omega^{2} \Delta t^{2}}\right|>1$
$\sigma_{2}=\lambda \Delta t-\sqrt{(\lambda \Delta t)^{2}+1}=\left|i \omega \Delta t-\sqrt{1-\omega^{2} \Delta t^{2}}\right|>1$

 

진동하는 시스템에서는 발산하는 결과가 나옵니다. 또한 꼭 $\lambda$가 허수부만 있는게 아니더라도 방법은 A-unstable, 즉 항상 unstable한 결과가 나옵니다. 두 $\sigma_{1},\sigma_{2}$가 1보다 작도록 하는 $\lambda$가 없기 때문입니다.

저작자표시 비영리 변경금지 (새창열림)

'수치해석 Numerical Analysis' 카테고리의 다른 글

[수치해석] 미분방정식을 시간이 작아지는 방향으로(역으로) 풀 때  (0) 2023.09.17
[수치해석] Runge Kutta 4th order 증명  (0) 2022.03.16
[수치해석] Numerical solution of ODE (6) Runge-Kutta method  (0) 2021.09.26
[수치해석] Numerical solution of ODE (5) Predictor-Corrector Method  (0) 2021.09.26
[수치해석] Numerical solution of ODE (4) Trapezoidal method (Crank-Nicolson)  (0) 2021.09.24
'수치해석 Numerical Analysis' 카테고리의 다른 글
  • [수치해석] 미분방정식을 시간이 작아지는 방향으로(역으로) 풀 때
  • [수치해석] Runge Kutta 4th order 증명
  • [수치해석] Numerical solution of ODE (6) Runge-Kutta method
  • [수치해석] Numerical solution of ODE (5) Predictor-Corrector Method
보통의공대생
보통의공대생
수학,프로그래밍,기계항공우주 등 공부하는 기록들을 남깁니다.
  • 보통의공대생
    뛰는 놈 위에 나는 공대생
    보통의공대생
  • 전체
    오늘
    어제
    • 분류 전체보기 (460)
      • 공지 (1)
      • 영어 공부 English Study (40)
        • 텝스 TEPS (7)
        • 글 Article (21)
        • 영상 Video (10)
      • 연구 Research (99)
        • 최적화 Optimization (3)
        • 데이터과학 Data Science (7)
        • 인공지능 Artificial Intelligent (40)
        • 제어 Control (45)
      • 프로그래밍 Programming (103)
        • 매트랩 MATLAB (25)
        • 파이썬 Python (33)
        • 줄리아 Julia (2)
        • C++ (3)
        • 리눅스 우분투 Ubuntu (6)
      • 항공우주 Aeronautical engineeri.. (21)
        • 항법 Navigation (0)
        • 유도 Guidance (0)
      • 기계공학 Mechanical engineering (13)
        • 열역학 Thermodynamics (0)
        • 고체역학 Statics & Solid mechan.. (10)
        • 동역학 Dynamics (1)
        • 유체역학 Fluid Dynamics (0)
      • 수학 Mathematics (34)
        • 선형대수학 Linear Algebra (18)
        • 미분방정식 Differential Equation (3)
        • 확률및통계 Probability & Sta.. (2)
        • 미적분학 Calculus (1)
        • 복소해석학 Complex Analysis (5)
        • 실해석학 Real Analysis (0)
      • 수치해석 Numerical Analysis (21)
      • 확률 및 랜덤프로세스 Random process (2)
      • 추론 & 추정 이론 Estimation (3)
      • 기타 (26)
        • 설계 프로젝트 System Design (8)
        • 논문작성 Writing (55)
        • 세미나 Seminar (2)
        • 생산성 Productivity (3)
      • 유학 생활 Daily (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    pytorch
    우분투
    텝스공부
    에러기록
    고체역학
    인공지능
    matplotlib
    obsidian
    수치해석
    MATLAB
    Zotero
    생산성
    teps
    Numerical Analysis
    논문작성법
    Linear algebra
    JAX
    텝스
    IEEE
    Statics
    논문작성
    WOX
    딥러닝
    Julia
    LaTeX
    Dear abby
    옵시디언
    Python
    서버
    ChatGPT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
보통의공대생
[수치해석] Numerical solution of ODE (7) Leap frog method
상단으로

티스토리툴바