<aside> 📌 격자 위에서 Field 계산하기
</aside>
<aside> <img src="/icons/paste_gray.svg" alt="/icons/paste_gray.svg" width="40px" /> PDE를 계산하는 여러 방법 중 FDM과 Spectral method를 배워보자.
</aside>
⚠️ 모르는 단어나 개념은 Googling이나 ChatGPT로 꼭 알아봅시다!!!
앞서 다른 장에서 언급하였듯이 물리적 지배 방정식들의 대부분이 고차원에서 Partial Differential Equation (PDE)를 가지고 있다. (왜 그런지도 곰곰히 생각해 보자.) 손계산으로 해(analytic solution)를 가질 수 있으면 좋겠으나 그런 경우는 매우 드문 특수 경우 중 하나이다. Separation of Variable이 대표적인 예이다. 손계산으로는 풀 수 없을 때, 또는 풀어야 할 계산 식의 양이 너무 많을 때 우리는 수치해석법 (Numerical method)를 보통 사용한다. 계산 방법은 사람이 만들지만 컴퓨터에 맡기는 것이다. 하지만 실전에서 느끼는 바로는 컴퓨터에 맡긴다고 하여 대충 알고 프로그래밍을 할 경우, 프로그램에 문제가 생기고 이를 해결하기 위해서는 컴퓨터가 진행하는 Workflow를 하나하나 손계산이 가능할 정도의 수준으로 파악할 수 없게 끔 된다. 코드가 훤히 들여다 보이는 상황일 것이다. 본인이 만들고 본인의 코드를 훤히 잘 모른다라는게 말이 안되는 것 처럼 보이지만 작동원리를 엉성하게 알고 있으면 그러한 엉성한 부분들을 결과값이 이상한 것을 파악하면서 하나씩 찾게 되며 익혀나가게 된다. 어쨌든 본론으로 돌아와 우리의 목표는 격자점들 위에서 PDE를 계산하는 것이다.
보통 해당 부분을 설명하면서 가끔 받는 질문이 “격자점이 필요한가요?” 이다. 컴퓨터에서는 연속된 값을 처리할 수 없다보니 시공간 또한 불연속한 지점에서의 값을 계산할 수 밖에 없다. 물론 Basis function을 도입하여 연속적인 것처럼 사용자가 설정한 함수로 공간을 메꾸긴 하지만 그마저도 한계는 분명 있다. 격자점 없이 PDE를 컴퓨터에서 어떻게 계산할 것인가?에 대해서 처음부터 이를 다시 생각해보면 특별한 방법을 찾기 힘들다는 … 또는 수치해석법이 시작된 역사를 처음부터 돌아보는 계기가 될지도 모르겠다. 이와 관련하여 재미있는 점은 Symbolic calculation이란 것이 존재한다. 대표적으로는 Mathematica, Maple (Matlab에서도 있긴 하다) 등의 상용 software가 있고, SymPy 라고 해서 Python에서 무료로 사용할 수 있는 프로그램도 있다. 이러한 프로그램들은 $x^2$를 $x$에 대해 미분하면 $2x$가 답으로 나온다. 또한 적분 또한 수식이 나오게 된다. 말 그대로 symbol로 계산할 수 있는 프로그램들이다. 그 뿐만 아니라 여러 Plotting 기능들도 제공을 한다.
Ordinary differential equation (ODE) 또는 PDE를 수치해석에서 계산하는 방법은 여러 방법들이 존재한다. FDM, FEM, FVM, Spectral method가 가장 기본적으로 알려져 있다. 여기서는 FDM와 Spectral method의 원리, 그리고 간단한 전기장 계산에 대해서 이야기하고자 Fini한다.
FDM은 기본적으로 대학 수학에서 꼭 알아야 할 것들 중 하나인 Taylor expansion의 응용으로 볼 수 있겠다. Taylor expansion은 아래와 같다.
$$ f(x_i+\Delta x) = f(x)|{x_i} + \frac{\Delta x}{1!} f'(x)|{x_i} + \frac{(\Delta x)^2}{2!} f''(x)|{x_i} + \frac{(\Delta x)^3}{3!} f'''(x)|{x_i} + ... = \sum_{n=0}^{\infty} \frac{(\Delta x)^n}{n!} f^{(n)}(x)|_{x_i} $$
정성적으로는 함수 $f(x)$ 에 대해 $x_i+\Delta x$ 위치에서 함수값을 계산하고 싶은데, 이를 $x_i$ 위치에서 함수값, 1차 미분값, 2차 미분값, 3차 미분값, …, 고차 미분값들… 을 이용하여 계산하는 것이다. (어떤 측면에서는 추측이나 예측, 또는 평가라고 해야할지도 모르겠다.) 한 위치에서 무한 개의 모든 미분값들을 알면 다른 위치에서의 값을 알 수 있다는 의미 일수도 있겠으나 다른 위치에서의 값으로 근사할 수 있다는 의미이겠다. 사람도 물론이거니와 컴퓨터도 무한 개의 값을 다룰 수는 없다보니 우리는 고차 미분이 포함된 항으로 갈 수록 값이 작아지는 (또는 작아지기를 바라는) 또는 oscillation하더라도 amplitude가 줄어드는 상황을 가정하여 얻고자하는 결과값의 정밀도 범위 내에서 무시할 만한 수준이 되는 항이 발견되면 그 항부터 고차항들은 모두 고려하지 않게 된다. 이를 Truncation이라고 부른다.