[수치해석] Numerical solution of ODE (4) Trapezoidal method (Crank-Nicolson)

2021. 9. 24. 19:19·수치해석 Numerical Analysis

(앞선 글부터 보면 알 수 있지만 문자를 표현할 때 아래 첨자는 공간 상의 좌표, 위 첨자는 시간 상의 좌표를 의미합니다.)

 

 

trapezoidal 방법은 implict method 중 하나입니다. (즉, 미분할 때 다음 값($y^{n+1},t^{n+1}$)도 가져다 씀)

이 방법은 PDE에 쓰일 때 Crank-Nicolson method라고 합니다.

 

$y^{'}=f(y,t)$

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

 

implicit이면 stable 영역에서 항상 stable합니다. 위 방법의 장점은 accuracy가 globally 2nd order($\Delta t^{2}$)라는 점입니다.

 

이 방법을 model problem을 통해 분석해보겠습니다.

$y^{'}=\lambda y$

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

 

여기서 각 iteration마다 amplication factor인 $\sigma_{TR}$가 곱해져서 y값을 구하게 됩니다.

$y^{n}=\sigma_{TR}^{n} y^{0}$

 

$\sigma_{TR}=\frac{1+\frac{\lambda \Delta t}{2}}{1-\frac{\lambda \Delta t}{2}}$

이 값을 $\sigma_{exact}$와 비교를 하면 accuracy, phase error, stability를 알 수 있습니다.

 

1. Accuracy

 

$\sigma_{\text {exact }}=e^{\lambda \Delta t} = 1+\lambda \Delta t+\frac{(\lambda \Delta t)^{2}}{2!}+\frac{(\lambda \Delta t)^{3}}{3!}+\cdots$

$\sigma_{TR}=\left(1 + \frac { \lambda \Delta t } { 2 } \right) / \left(1 - \frac { \lambda \Delta t } { 2 }\right) =1 + \lambda \Delta t + \frac { ( \lambda \Delta t ) ^ { 2 } } { 2 } + \frac { ( \lambda \Delta t ) ^ { 3 } } { 4 } + \cdots$

 

두 항을 비교하면 $\Delta t^{3}$일 때부터 차이가 나므로 locally 3rd order accuracy를 가지고 globally 2nd order입니다. (적분하면 $\Delta t$만큼 곱해지므로)

 

 

2. Stability

stability는 시스템의 eigenvalue에 따라서 stable한 시스템일 때 amplication factor의 절댓값이 1을 넘으면 시간이 거듭할 수록 값이 발산하게 됩니다. 따라서 $|\sigma_{TR}|$의 절댓값이 1보다 작은 영역을 확인합니다.

 

$\lambda=\lambda_{R}+i \lambda_{I}$
$\sigma_{T R}=\left|\frac{\left(1+\frac{\lambda_{R} \Delta t}{2}\right)+i\left(\frac{\lambda_{1} \Delta t}{2}\right)}{\left(1-\frac{\lambda_{R} \Delta t}{2}\right)-i\left(\frac{\lambda_{1} \Delta t}{2}\right)}\right| \leqslant 1$

Trapezoidal method의 stability 영역

 

(MATLAB으로 $|\sigma|<1$인 영역의 경계를 표시해놓은 것입니다. (왼쪽 경계는 식을 대입한 x범위 때문입니다. 적어도 $-3<\lambda_{R}\Delta t<0$에서는 1보다 작습니다.)

 

trapezoidal method의 장점은 다음과 같이 exact solution과 동일한 stability 영역을 갖는다는 점입니다.

따라서 시스템이 unstable하면 trapezoidal method로 답을 구했을 때 똑같이 unstable하게 나오고, 시스템이 stable하면 동일하게 stable한 결과를 얻을 수 있습니다. 즉, 이 방법은 A-stable(Unconditionally stable)합니다.

 

3. Phase error

 

phase error는 $\lambda=i\omega$라고 생각하고 oscillating system에 대해 위상차가 얼마나 변하는지 알아보는 것입니다. $\sigma_{TR}$식에서 $\lambda=i\omega$만 대입해주면 됩니다.

 

 

여기서 $2\arctan(\omega\Delta t /2)$가 trapezoidal method를 사용했을 때 나오는 phase입니다.

 

exact $\theta=\omega \Delta t$와 얼마나 차이가 나는지 계산해보면

$\text{Phase error }= \omega \Delta t-2 \tan ^{-1} \frac{\omega \Delta t}{2}=+\frac{1}{12}(\omega \Delta t)^{3}$

 

이전에 봤던 implicit euler 방법에서 phase error가 $\frac{(\omega \Delta t)^{3}}{3}$이므로 trapezoidal method의 phase error가 더 작습니다.

 

explicit euler 방법은 $\Delta t$의 크기가 한정되지만(unstable한 영역 때문에)

trapezoidal method나 implicit euler(backward euler) 방법은 $\Delta t$가 한정되지는 않습니다.

 

다만 $\Delta t$가 너무 크면

$ \underset{\Delta t \rightarrow \infty}{\lim}\sigma_{TR}=-1$이므로

solution 값이 심하게 진동하기 때문에 $\Delta t$가 너무 크지 않은지 확인할 필요가 있습니다.

다음 그림은 Implicit Euler(그림에서 IE) 방법, Explicit Euler(그림에서 EE) 방법, Trapezoidal 방법을 비교했습니다.

위 시스템은 oscillating만 하는 시스템입니다. (eigenvalue에서 imaginary 성분 밖에 없음)

이 때 trapezoidal은 amplitude 변화없이 phase 차이만 존재하고,

IE 방법은 점점 amplitude가 감소하고, EE방법은 점점 amplitude가 커지는 것을 확인할 수 있습니다. phase error 차이는 는 그림에서 잘 표현되지 못했으니 자세한 것은 이전 글을 찾아봐주세요. 둘의 phase error가 동일한데 그림을 그릴 당시에는 그걸 표현하지 못했네요.

 

 

Trapezoidal method는 여기까지 하고 다음에는 explicit method 중 하나인 Predictor-Corrector method를 보겠습니다.

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

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

[수치해석] 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 (3) Implicit Euler (Backward Euler)  (0) 2021.04.29
[수치해석] Numerical solution of ODE (2) Explicit Euler  (0) 2021.04.27
[수치해석] Numerical solution of ODE (1) introduction  (0) 2021.04.07
'수치해석 Numerical Analysis' 카테고리의 다른 글
  • [수치해석] Numerical solution of ODE (6) Runge-Kutta method
  • [수치해석] Numerical solution of ODE (5) Predictor-Corrector Method
  • [수치해석] Numerical solution of ODE (3) Implicit Euler (Backward Euler)
  • [수치해석] Numerical solution of ODE (2) Explicit Euler
보통의공대생
보통의공대생
수학,프로그래밍,기계항공우주 등 공부하는 기록들을 남깁니다.
  • 보통의공대생
    뛰는 놈 위에 나는 공대생
    보통의공대생
  • 전체
    오늘
    어제
    • 분류 전체보기 (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 &amp; 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
    Zotero
    에러기록
    생산성
    수치해석
    Linear algebra
    인공지능
    Numerical Analysis
    옵시디언
    WOX
    Python
    JAX
    우분투
    ChatGPT
    Statics
    obsidian
    IEEE
    Julia
    Dear abby
    teps
    딥러닝
    MATLAB
    텝스
    논문작성
    텝스공부
    LaTeX
    matplotlib
    논문작성법
    서버
  • 최근 댓글

  • 최근 글

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

티스토리툴바