본문 바로가기
전공백서/원자핵공학과

원자핵공학과: 수치해석기초

by STEMSNU 2024. 2. 28.

1. 과목에서 배울 수 있는 내용

 수치해석이란, 어떠한 함수, 방정식의 해 혹은 데이터를 컴퓨터를 이용해 수치적으로 근사하여 근삿값을 구하는 과정 혹은 알고리즘에 대한 학문입니다. 매우 많은 과학, 공학적 문제의 경우, 수학적으로 정확한 해 혹은 해석적인 해를 구하는 것이 불가능한 경우가 많습니다. 이런 경우 대략적인 해를 구하거나, 시뮬레이션을 수행하기 위해 컴퓨터를 이용한 수치적 방법을 이용하는 모델링 혹은 시뮬레이션을 사용해야 합니다. 원자핵공학과에서 배우는 수치해석기초 과목은, 이러한 수치적 해석에 필요한 방법을 공식화하고 관련 프로그램에 대한 이해와 활용경험을 쌓는 과목이라고 보시면 될 것 같습니다.

 공학자로서 다양한 문제 및 요구 조건에 해당하는 미분방정식을 푸는 데 있어 수치해석 사용 경험을 쌓을 수 있고, 실제 공학문제 해결의 기초가 될 수 있는 수준까지 프로그래밍을 실습합니다. 사실상 공학수학 3라고 생각하면 되며, 이 과목을 들었을 시 MATLAB과 친해질 수 있으며, 복잡한 미분방정식의 해를 순조롭게 계산해낼 수 있는 능력을 갖추게 됩니다. 원자로 해석과 같은 특정 주제, 고급 활용 주제들은 나중에 다른 과목으로 배우고 수치해석기초 과목에서는 기본적인 계산들만 배웁니다.

2. 과목의 전반적인 개요

 우선, 첫 주차에는 수치해석에 사용될 프로그램인 MATLAB 소개 및 설명을 진행합니다. 그 다음으론 자료형과 부동소수점, 유효숫자 등 개념에 대해 배웁니다. 2-3주차부터는 본격적으로 수학적 개념들이 등장하기 시작합니다. 비선형 방정식의 해를 구하는 방법들을 배웁니다. Bisection method, Linear interpolation method, Newton-Raphson method , 해 근처 임의의 점에서 시작해 해로 수렴시키는 방법들을 배웁니다. 즉 비선형 방정식을 푸는 방법에 대해 배우고, 실습합니다. 그 다음으로는 이산화(discretization)를 통한 모델링과 와 크기가 큰 선형계의 해를 구하는 방법에 대해 배웁니다. 이산화를 통한 모델링이란, 예를 들어 확산방정식이 있을 때 이를 컴퓨터가 풀 수 있게 영역을 나눠주는 것이라고 생각하면 됩니다. 또한 크기가 큰 선형계는, 기본적인 행렬방정식 Ax = B 로 설명 가능하지만 행렬 A, B의 크기가 매우 큰 경우에 해당합니다. 행렬방정식을 풀 수 있게 해주는 가우소 소거법(Gauss elimination)에 대해 배우고, 선형계를 풂에 있어 추가적으로 연산 복잡도를 낮출 수 있는 LU factorization에 대해 배웁니다. 그 다음에는 반복적 (Iterative) 해를 이용하여 선형계를 푸는 방법들인 Jacobi method, Gauss Seidel method등에 대해 배우고, 외삽을 통해 선형계의 해를 더욱 빠르게 수렴시킬 수 있는 SOR (Successive over-relaxation) method를 배우고 실습합니다. 여기까지 배우면, 미분방정식을 제외한 기본적인 방정식들을 풀 수 있습니다. 이 다음으로 이산화를 통한 미분방정식의 표현에 대해 자세히 배웁니다. 예를 들어, 원자핵공학과에서 흔히 다루는 중성자의 확산방정식은 다음과 같습니다.

중성자 확산방정식 수식. D는 확산계수, σ는 반응상수 (단위 거리당 중성자가 반응하여 사라질 확률), s는 중성자의 external source term

 위 확산방정식을 풀면 중성자 플럭스의 공간 분포 φ를 구할 수 있지만, 해석적 해가 존재하지 않은 데다 경계조건에 따라 해가 바뀌기 때문에 수치적 방법을 이용해 구해야 합니다.

수치적 방법을 적용해, 원자로 내 중성자 선속 분포 (발생 파워)를 계산한 예시. 주어진 경계조건에 대한 확산방정식의 해이다.

 이 때 미분 연산자는 차분화를 통해 표현이 가능한데, 이 문제가 몇 차원 문제인지, 그리고 좌표계를 어떻게 잡았는지에 따라 차분화 표현이 달라집니다. 예를 들어, 위 방정식이 1-D라면 차분화 수식은 다음과 같이 주어집니다.

1-D 차분화 수식. B^2 = D/σ로, material buckling이라 불리는 값이다.
2-D 차분화 수식. 차원이 높아질수록 term들이 추가된다.

 차분화 수식이 주어졌으니, 앞에서 배운 선형계를 푸는 방법들을 적용해서 풀 수 있습니다. 이러한 방식으로 주어진 문제 조건에 대해 차분화를 어떻게 시키는지 배웁니다.

 다음은 선형계 해법의 연장으로, Matrix eigenvalue, 즉 행렬방정식의 고유값 문제들에 대해 다룹니다. 행렬방정식이 Ax = B 에서 Ax = λx로 바뀌었다고 보시면 됩니다. 이러한 고유값 문제들도 앞서 다뤘던 반복해법을 이용하여 풀 수 있으며, 이들에 대해 배웁니다. 가장 간단한 power method를 이용하면 가장 큰 eigenvalue를 구할 수 있고, inverse power method를 이용하여 가장 작은 eigenvalue를 구할 수 있습니다. 그리고 나서 두번째, 세번째 등등의 eigenvalue를 구하기 위해서 method of deflation, method of decontamination등을 배웁니다. 간단하게, 이미 구한 eigenvalueeigenvector 성분을 해당 계에서 빼준 후 그 다음 eigenvalue를 구하러 가는 거라고 생각하시면 될 것 같습니다. 이 과정이 끝나면 어떠한 임의의 행렬에 대해, eigenvalueeigvenvector를 구할 수 있게 됩니다. 그 다음으로는, 더 빠르게 수렴시킬 수 있는 Chebyshev acceleration method, Wielandt Shift method, Q-R method 등에 대해서 배우지만, 시간 관계상 깊게 배우지는 않고 이러한 개념들이 있다 정도로 소개만 하고 넘어갑니다.

 다음 챕터는 Interpolation, 내삽에 대해 배웁니다. 내삽이란, 기존 데이터를 가지고 기존 데이터 영역에서 새로운 데이터 포인트가 어디인지 예측하는 것을 말합니다.

내삽의 도식도

 예를 들어, 위 그림에서 데이터 포인트 A~F까지 있을 때, 새로운 데이터 포인트 P를 찍는 것을 의미합니다. 내삽은 이런 의미에서 데이터들을 통해 원함수 값을 유추하는 것이라고 할 수 있습니다. 단순히 두 점을 선으로 잇는 linear interpolation 외 더 진보된 내삽 방법들에 대해 배웁니다. 여러 점들이 있을 때, 그들을 다 지나게 만드는 다항식을 구하는 방법으로 Lagrange interpolation Newton interpolation등의 방법을 배웁니다. 또한 넓은 영역에 존재하는 수많은 점들을 통과시키는 함수를 구하는 것은 매우 어려우므로, 데이터 포인트를 구간으로 쪼개서, 더 낮은 order의 수식으로도 내삽이 가능한 piecewise polynomial interpolation, 특히 그중에서도 3차식에 해당하는 cubic spline 등에 대해서 배웁니다. Cubic spline 정도만 하더라도 일반적인 공학 문제을 다루는 데 있어 충분합니다. 

 내삽 다음은 사용 피팅식이 요구하는 데이터 포인트 수보다 더 데이터가 많을 때, 어떻게 해당 피팅식을 구하는지를 배웁니다. 일반적으로 데이터 피팅에 있어, order가 매우 높은 다항식은 사용하지 않습니다. 이는 order가 높아질수록 과적합 문제를 발생시키고, 해당 범위에서 벗어날 때, extrapolation 시 오차가 커지는 문제점을 가지고 있기 때문입니다. 따라서 내가 사용하고자 하는 수식은 3차식인데 데이터 포인트는 100개이고, 이 데이터 포인트들을 최대한 잘 만족시키는 3차 다항식 피팅식을 구하는 것과 같은 경우는 매우 빈번합니다. 3차 다항식이면 필요 변수는 4개인데, 데이터 포인트가 100개이므로 이러한 시스템을 과결정계 (over-determined system)이라 합니다. 이러한 경우, 최대한 데이터 포인트에 가까운 수식을 구해낼 수 있는 least-square method를 사용하여 3차다항식의 계수들을 결정하는 것이 일반적인 접근방식입니다. 이 과목에서는 이러한 과결정계를 푸는 방법을 소개하고, 그리고 결국 그 방법이 least-square method로 이어진다는 것을 확인할 수 있습니다. 이 외에도 직교다항식을 이용한 데이터 피팅, Gram-Schmidt 직교화 및 Chebyshev polynomial을 이용한 피팅 등에 대해서도 다루지만, 깊게 다루지는 않습니다. 즉 이 과정에서는 데이터 점들을 통해 원래 함수를 추정하는 과정에 대해 배우며, 마칠 시 데이터 포인트들을 지나는 reasonable한 다항식을 계산할 수 있게 됩니다.  

 원함수 추정 후에는 수치해석을 이용한 미분과 적분에 대해 조금 심화해 배웁니다. 수치해석상 필수적인 이산화 과정에서 오차가 발생하는데, 어떤 방법을 사용해서 미분값과 적분값을 계산해야 이러한 오차가 최소한으로 발생하는지 배웁니다. 데이터 포인트들을 piecewise 구간들로 나눠, 해당 다항식을 구한 후 다항식을 적분하여 적분값을 얻는 방법들에 대해 배웁니다. 여기서 배우는 방법들 중, 정말 오차에 매우 민감한 경우가 아니라면 적분값을 구하는 데 있어 Simpson method (2차다항식 사용) 이상을 사용하는 경우는 거의 없으므로, 이러이러한 방법들이 있다는 걸 배우고, 그 방법들의 수학적 원리가 어떻게 되는지 잘 이해하는 것이 중요합니다.

 마지막 부분은 수치해석의 꽃이라고도 할 수 있는 부분으로, ODE(ordinary differential equation, 상미분방정식) 해 구하기 부분입니다. 여기서 그 유명한 룽게-쿠타 (Runge-Kutta) 방법이 나옵니다. 상미분방정식은 아래 세가지 유형으로 구분 가능합니다.  

상미분방정식의 세가지 유형

 앞에서 다뤘던 미분방정식 해법들은 다 경곗값 문제들에 해당하는 것이었고, 이제 다루는 것은 초기값 문제에 해당합니다. 초기값이 어떻게 주어졌을 때, 시간이나 공간이 변함에 따라 어떻게 evolution 할 것인지를 묻는 문제들이라고 생각하시면 됩니다. Euler method, Multipoint method, Runge-Kutta 방법들이 있는데, 위 방법들을 전부 익히면 초기값 문제를, 수치적 오차를 제어하며 풀 수 있는 능력을 갖출 수 있습니다.

3. 선배의 조언

 현대 공학, 과학이 다루는 문제는 이제 더 이상 손으로는 풀 수 없는 지경에 이르렀습니다. 공학에서, 특히 원자핵공학에서 중요하게 다루는 현상들의 대부분(ex) 유체, 열전도, 확산, 수송 등)은 지배 방정식만 있고, 해석적인 해는 거의 없거나, 아니면 너무 기본적이라 별로 논의될 필요가 없는 경우가 허다합니다. 따라서 이러한 지배방정식을 풀고 내가 원하는 해를 얻기 위해 수치해석은 선택이 아닌 필수라고 할 수 있습니다. 해당 과목의 수강 여부에 따라 미분방정식 및 데이터를 다루는 데 있어 역량차이가 매우 크게 나기 때문에, 개인적인 의견이지만 앞으로 연구에 종사하고 싶은 사람들은 이 과목을 꼭 수강하길 권합니다. 추가적으로 데이터 해석 & 계산 코드의 양대쌍맥 중 하나인 MATLAB에 익숙해질 수 있는 절호의 기회니, 로드가 조금 많아 힘들더라도 참고 끝까지 수강하시면 매우 크게 성장한 자신을 마주하실 수 있으실 겁니다. 과목 특성상 과제 난이도가 조금 있는 편이고, 시간이 많이 걸립니다. 또한 수치해석기초에서 다루는 이론 범위가 방대하다보니, 빠르게 과제를 끝내고 내용을 복습하시는 방향으로 공부하시는 것을 권합니다.

4. 진로 선택에 도움되는 점

 앞으로 원자핵공학과에서 어떤 전공을 하던, computationsimulation 역량은 필수적입니다. 따라서 앞으로의 진로 선택에 있어, 해당 과목 수강이 어떠한 주제를 전공할지를 결정할지 도와준다기보단, 공학도로서 본인의 기본 실력, 연구역량을 기를 수 있는 좋은 기회라고 여기면 적절할 것 같습니다. 개인적으로는 공학수학 3라고 생각하며, 전필로 지정해도 괜찮다는 생각이 듭니다.

5. 맺음말

 해당 과목 수강을 적극 권합니다. 앞으로 어떤 주제를 연구하더라도, 마치 공학수학처럼 이 과목이 연구에 큰 도움을 줄 수 있을 것으로 생각합니다. 감사합니다.

 

댓글