일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 인공지능
- obsidian
- 논문작성
- Python
- 고체역학
- pytorch
- Dear abby
- LaTeX
- Julia
- IEEE
- Statics
- 에러기록
- JAX
- 우분투
- MATLAB
- WOX
- 텝스
- ChatGPT
- 생산성
- 텝스공부
- 논문작성법
- 딥러닝
- Zotero
- Linear algebra
- matplotlib
- 수식삽입
- 수치해석
- 옵시디언
- teps
- Numerical Analysis
- Today
- Total
뛰는 놈 위에 나는 공대생
[수치해석] Numerical differentiation (1) 본문
컴퓨터 상에서 미분을 수행하기 위해서는 어떻게 할까?
앞에서 interpolation을 이용해서 식을 구한 다음에 미분을 수행할 수도 있지만,
interpolation을 배제하고 each discrete point에서 derivatives를 구해야한다고 생각해보자.
# Notation 참고
$x_{B}^{A}$ : $A$는 시간에서의 위치(Timesteps), $B$는 공간에서의 위치를 의미합니다.
Taylor series expansion을 통해서 미분값을 구할 수 있는데, 이 때는 미분가능성이 전제로 되어있어야 합니다.
$f^{'}(x)=\underset{\Delta x \rightarrow 0}{\lim}\frac{f(x_{i}+\Delta x)-f(x_{i})}{\Delta x}=\underset{\Delta x \rightarrow 0}{\lim}\frac{f(x_{i})-f(x_{i}-\Delta x)}{\Delta x}=\underset{\Delta x \rightarrow 0}{\lim}\frac{f(x_{i}+\Delta x)-f(x_{i}-\Delta x)}{2\Delta x}$
같은 derivatives를 위와 같이 3개의 방식으로 표현할 수 있고 이 세 가지 식이 모두 같은 것은 바로 limit를 사용했기 때문입니다. 하지만 컴퓨터 상에서는 아무리 $\Delta x$를 작게 만든다고 해도 limit는 불가능합니다.
따라서 컴퓨터 상에서 위의 세 식을 시도한다면 세 개의 값은 다를 수밖에 없습니다.
이렇게 finite한 차이를 이용한 것을 Finite Difference Method (FDM)이라고 합니다.
Numerical scheme에서 미분을 어떻게 구하는지 알아보겠습니다.
1) First order forward finite difference
$f(x_{i}+\Delta x)=f(x_{i+1})=f(x_{i})+\Delta x f^{'}(x_{i})+\frac{\Delta x^{2}}{2!}f^{''}(x_{i})+\frac{\Delta x^{3}}{3!}f^{'''}(x_{i})+\cdots$
구하고자 하는 것은 $f^{'}(x_{i})$이므로 $\Delta x f^{'}(x_{i})$만 남기고 나머지 항들을 좌변으로 옮깁니다. 그 다음에 $\Delta x$로 나눠줍니다.
$f^{'}(x_{i})=\frac{f(x_{i}+\Delta x)-f(x_{i})}{\Delta x}-\frac{\Delta x}{2!}f^{''}(x_{i})-\frac{(\Delta x)^{2}}{3!}f^{'''}(x_{i})-\cdots$
이 때 $-\frac{\Delta x}{2!}f^{''}(x_{i})-\frac{(\Delta x)^{2}}{3!}f^{'''}(x_{i})-\cdots$는 error term이고, $\Delta x \rightarrow 0$으로 간다면 error term은 작아집니다.
또한 error term에서 가장 contribution이 큰 항은 $-\frac{\Delta x}{2!}f^{''}(x_{i})$이므로
이 error term을 $\theta(\Delta x^{1})$이라고 적고 leading order error (LOE)라고 합니다. 가장 크게 contribution하는 항의 order를 사용해서 $\Delta x^{1}$으로 적은 것입니다.
이와 같이 error term이 first order이면서, $x_{i}$ 위치에서 그 앞에 있는 항 $f(x_{i}+\Delta)=f(x_{i+1})$을 쓴 finite difference method를 "1st order forward finite difference"라고 합니다.
1st order는 error term과 관련된 것이고, forward는 미분을 구할 때 활용하는 다른 $x$값이 현재 위치보다 앞인지 뒤인지에 따라 정해집니다.
2) First order backward finite difference
$f(x_{i}-\Delta x)=f(x_{i-1})= f(x_{i})-\Delta x f^{'}(x_{i})+\frac{\Delta x^{2}}{2!}f^{''}(x_{i})-\frac{\Delta x^{3}}{3!}f^{'''}(x_{i})+\cdots$
이 식을 정리하면
$f^{'}(x_{i})=\frac{f(x_{i})-f(x_{i-1})}{\Delta x}+\frac{\Delta x}{2!}f^{''}(x_{i})-\frac{(\Delta x)^{2}}{3!}f^{'''}(x_{i})+\cdots$
여기서의 error term은
$\frac{\Delta x}{2!}f^{''}(x_{i})-\frac{(\Delta x)^{2}}{3!}f^{'''}(x_{i})+\cdots ~ \theta(\Delta x^{1})$으로 볼 수 있으며
따라서 First order backward finite difference입니다.
$f(x_{i-1})$을 사용하면서 error term에서 가장 큰 항이 $\Delta x^{1}$을 포함하기 때문입니다.
3) Second order central difference
$\left\{\begin{matrix}
f(x_{i+1})=f(x_{i})+\Delta x f^{'}(x_{i})+\frac{\Delta x^{2}}{2!}f^{''}(x_{i})+\frac{\Delta x^{3}}{3!}f^{'''}(x_{i})+\cdots\\
f(x_{i-1})= f(x_{i})-\Delta x f^{'}(x_{i})+\frac{\Delta x^{2}}{2!}f^{''}(x_{i})-\frac{\Delta x^{3}}{3!}f^{'''}(x_{i})+\cdots
\end{matrix}\right.$
$f^{'}(x_{i})=\frac{f(x_{i+1})-f(x_{i-1})}{2\Delta x}-\frac{\Delta ^{2}}{6}f^{'''}(x)+\cdots$
error term $-\frac{\Delta ^{2}}{6}f^{'''}(x)+\rightarrow \theta (\Delta x^{2})$
이와 같은 방법을 Second order central difference입니다.
지금까지 본 error term
1) first order forward difference : $-\frac{\Delta x}{2!}f^{''}(x_{i})-\frac{(\Delta x)^{2}}{3!}f^{'''}(x_{i})-\cdots$
2) first order backward difference : $\frac{\Delta x}{2!}f^{''}(x_{i})-\frac{(\Delta x)^{2}}{3!}f^{'''}(x_{i})+\cdots$
3) second order central difference : $-\frac{\Delta ^{2}}{6}f^{'''}(x)+\cdots$
다음과 같습니다. order도 저마다 다를 뿐더러, $\Delta x$와 곱해져있는 값이 이차 미분 $f^{''}$, 3차 미분 $f^{'''}$으로 다르고, 같은 first order에 같은 차수의 미분이라해도 부호가 다릅니다. 따라서 각 방법에 따라 error의 특성이 다르고, 이는 방법마다 성능이 다를 수 있음을 추론해볼 수 있습니다.
$\theta (\Delta x^{n}) \text{ : order of accuracy}$
꼭 n이 크다고 해서 정확하다고 보장할 수는 없지만, 정확할 확률이 높습니다.
예를 들어 위의 error term에서 3차 미분이 발생하는 경우라면 second order라고 해도 부정확할 수 있는 것입니다.
error의 order가 말해줄 수 있는 것은 데이터가 더 많아질수록, error가 줄어드는 속도입니다.
다음과 같이 $\Delta x$가 데이터 수가 늘어나면서 절반으로 줄어들면, first order보다 second order가 더 크게 줄어들 것입니다.
위에서 설명한 방식들을 통해 error term의 차수를 다양하게 만들 수 있습니다.
다만 이렇게 다양한 error term을 구하는 것이 복잡한 관계로 이미 Taylor table로 정리가 되어있다고 합니다.
다음에는 위와 같은 방법으로 differentiation을 수행할 수 있도록 만들어진 table에 대해서 알아보겠습니다.
'수치해석 Numerical Analysis' 카테고리의 다른 글
[수치해석] Error characteristics/Modified wave number (0) | 2021.03.27 |
---|---|
[수치해석] Numerical differentiation (2) (0) | 2021.03.27 |
[수치해석] interpolation (2) - Spline interpolation (0) | 2021.03.12 |
[수치해석] Interpolation (1) - Polynomial interpolation (0) | 2021.03.12 |
[수치해석] Operation cost / Condition number(Stiffness) (0) | 2021.03.04 |