왜 수치해석 문제는 Ax = b가 되는가?

연속적인 물리 문제를 유한한 변수와 차분식으로 이산화해 Ax=b 선형 시스템으로 구성하는 과정

Series Ax = b 다시 보기 3 / 3

선형대수를 공부하다 보면

$$ Ax=b $$

가 반복해서 등장한다.

수치해석에서도 마찬가지다.

열전도, 변형, 유체, 전자기장과 같은 다양한 문제를 수치적으로 풀다 보면 거대한 행렬 $A$와 벡터 $x$, $b$가 등장한다.

왜 이렇게 많은 문제가 결국 $Ax=b$ 형태로 바뀌는 것일까?

그 이유를 이해하려면 연속적인 문제를 컴퓨터가 처리할 수 있는 유한한 문제로 바꾸는 과정, 즉 이산화(Discretization)를 볼 필요가 있다.


현실의 문제는 대개 연속적이다

예를 들어 막대 내부의 온도를 생각해보자.

막대의 온도는 몇 개의 점에만 존재하는 것이 아니라 공간 전체에서 정의된다.

즉

$$ T(x) $$

처럼 연속적인 함수로 표현된다.

공간의 모든 $x$에 대해 온도 값이 존재한다.

하지만 컴퓨터가 무한히 많은 점의 값을 모두 저장하고 계산할 수는 없다.

그래서 연속적인 문제를 몇 개의 대표 지점으로 나눈다.


연속 함수에서 유한한 벡터로

막대를 $n$개의 지점으로 나눈다면

$$ T(x) $$

대신

$$ T_1,T_2,\dots,T_n $$

만 저장할 수 있다.

이를 하나의 벡터로 묶으면

$$ x= \begin{bmatrix} T_1\\ T_2\\ \vdots\\ T_n \end{bmatrix} $$

이 된다.

여기서부터 연속 함수 문제가 벡터 문제로 바뀌기 시작한다.


미분도 이산화할 수 있다

많은 물리 문제는 미분방정식으로 표현된다.

간단한 예로

$$ u''(x)=f(x) $$

를 생각해보자.

컴퓨터는 미분 연산을 그대로 수행하기보다 주변 점의 값으로 근사할 수 있다.

예를 들어 중앙차분법을 사용하면

$$ u''(x_i) \approx \frac{u_{i-1}-2u_i+u_{i+1}}{h^2} $$

이다.

이를 원래 방정식에 대입하면

$$ \frac{u_{i-1}-2u_i+u_{i+1}}{h^2} = f_i $$

이고,

$$ u_{i-1}-2u_i+u_{i+1} = h^2f_i $$

라는 하나의 선형식이 얻어진다.


각 지점의 관계를 모으면 연립방정식이 된다

이 식을 여러 지점에 대해 만들면

$$ -2u_1+u_2=h^2f_1 $$
$$ u_1-2u_2+u_3=h^2f_2 $$
$$ u_2-2u_3=h^2f_3 $$

와 같은 연립방정식이 생긴다.

이를 행렬 형태로 정리하면

$$ \begin{bmatrix} -2&1&0\\ 1&-2&1\\ 0&1&-2 \end{bmatrix} \begin{bmatrix} u_1\\ u_2\\ u_3 \end{bmatrix} = \begin{bmatrix} h^2f_1\\ h^2f_2\\ h^2f_3 \end{bmatrix} $$

가 된다.

즉,

$$ Ax=b $$

이다.


전체 흐름

이 과정을 한 줄로 정리하면 다음과 같다.

$$ \text{연속적인 문제} \rightarrow \text{이산화} \rightarrow \text{여러 개의 방정식} \rightarrow \text{연립방정식} \rightarrow Ax=b $$

따라서 미분방정식이 갑자기 행렬로 변한 것이 아니다.

연속적인 문제를 유한한 점으로 나누고 각 점 사이의 관계를 식으로 나타낸 결과, 자연스럽게 행렬이 등장한 것이다.


그렇다면 $A$, $x$, $b$는 무엇을 의미할까?

세 기호는 수치해석에서 보통 다음 세 요소를 나타낸다.

1. $x$

우리가 구하려는 미지수다.

예를 들어

  • 각 위치의 온도
  • 물체의 변위
  • 압력
  • 전위
  • 속도

등이 들어간다.


2. $A$

미지수들 사이의 관계를 나타낸다.

예를 들어

  • 주변 점과의 연결 관계
  • 미분 연산의 이산화
  • 물질의 물리적 특성
  • 메쉬의 연결 구조

등이 반영된다.


3. $b$

외부에서 주어진 조건이나 힘을 나타낸다.

예를 들어

  • 외부 열원
  • 외력
  • 경계조건
  • 입력 신호

등이 들어갈 수 있다.


미분방정식은 하나의 대표적인 예일 뿐이다

여기서 중요한 점은 수치해석에서 $Ax=b$가 등장하는 이유가 반드시 미분방정식 때문만은 아니라는 것이다.

미분방정식의 이산화는 매우 대표적인 예지만, 다른 문제들도 행렬 형태로 정리될 수 있다.

예를 들어

  • 보간
  • 최소제곱
  • 회귀
  • 최적화
  • 유한요소법
  • 회로 해석
  • 데이터 fitting

등에서도 선형 시스템이 등장한다.


컴퓨터그래픽스와의 연결

이 구조는 컴퓨터그래픽스에서도 매우 자주 나타난다.

특히 물리 기반 시뮬레이션에서는 더욱 그렇다.

예를 들어 천을 여러 개의 점과 연결선으로 나누면, 각 정점의 움직임은 주변 정점과 연결되어 있다.

연속적인 천을 그대로 계산하는 대신

$$ x_1,x_2,\dots,x_n $$

과 같은 유한한 정점 집합으로 바꾸고, 이들의 관계를 방정식으로 만든다.

그러면 결국 큰 선형 시스템

$$ Ax=b $$

를 풀게 된다.

비슷한 방식으로

  • Cloth Simulation
  • Soft Body Simulation
  • Elastic Deformation
  • Heat Diffusion
  • Poisson Equation
  • FEM

등이 선형 시스템과 연결된다.


$Ax=b$를 푼다는 것은 무엇인가?

이제 다시 처음으로 돌아가보자.

$$ Ax=b $$

에서 $x$를 구한다는 것은 단순히 미지수 몇 개를 계산하는 것이 아니다.

수치해석의 관점에서는

수많은 변수 사이에 얽혀 있는 관계를 동시에 만족시키는 상태를 찾는 것

이라고 볼 수 있다.

예를 들어 온도 문제라면

$$ x= \begin{bmatrix} T_1\\ T_2\\ \vdots\\ T_n \end{bmatrix} $$

를 구하는 것은 곧 전체 공간의 온도 분포를 구하는 것이다.


실제 계산에서는 역행렬을 잘 사용하지 않는다

이론적으로 $A$가 invertible하다면

$$ x=A^{-1}b $$

라고 쓸 수 있다.

하지만 실제 수치 계산에서는 보통 역행렬 $A^{-1}$ 전체를 구하지 않고, 필요한 해 $x$만 구한다.

역행렬을 만들면 현재의 $b$ 하나에 대한 해만 필요한데도, 가능한 모든 입력에 대한 변환 결과를 행렬 전체로 계산하고 저장하게 된다. 일반적인 밀집 행렬에서도 불필요한 연산과 메모리가 늘어나며, 이산화 문제처럼 $A$가 대부분 0인 희소행렬에서는 역행렬이 희소하지 않을 수 있어 메모리 부담이 특히 커진다.

대신 행렬의 구조에 맞는 방법을 사용해

$$ Ax=b $$

를 푼다. 예를 들어 Gaussian Elimination과 LU Decomposition은 분해를 이용해 필요한 해를 구하고, 대칭 양의 정부호 행렬에는 Cholesky Decomposition을 쓸 수 있다. Conjugate Gradient는 같은 조건의 큰 희소 문제에서 역행렬을 만들지 않고 반복적으로 해를 구하는 방법이다.

따라서 여기서 “직접 푼다”는 말은 역행렬을 계산한다는 뜻이 아니라, 주어진 $b$에 대해 $Ax=b$의 해를 구한다는 뜻이다. 이렇게 하면 불필요한 계산을 줄이고, 큰 희소행렬의 구조도 활용할 수 있다. 역행렬을 이용한 계산이 언제나 부정확한 것은 아니지만, 해 하나만 필요하다면 보통 선형 시스템을 직접 푸는 편이 더 효율적이고 수치적으로도 유리하다.


해가 존재하는 것만으로 충분하지 않다

수치해석에서는 또 하나 중요한 문제가 있다.

수학적으로 해가 존재하고 유일하더라도, 실제 컴퓨터 계산에서는 안정적으로 구할 수 없는 경우가 있다.

예를 들어 $A$가 거의 singular한 경우에는 $b$가 아주 조금만 변해도 $x$가 크게 변할 수 있다.

$$ Ax=b $$

에서

$$ b\rightarrow b+\delta b $$

라는 작은 변화가

$$ x\rightarrow x+\delta x $$

에서 매우 큰 변화로 이어질 수 있는 것이다.

이런 문제를 ill-conditioned problem이라고 한다.

따라서 수치해석에서는

해가 존재하는가?

뿐 아니라

그 해를 컴퓨터에서 얼마나 안정적으로 계산할 수 있는가?

도 중요하다.


선형대수와 수치해석의 차이

선형대수에서는 보통

$$ Ax=b $$

의 구조와 해의 존재성, 유일성을 공부한다.

수치해석에서는 여기에서 한 단계 더 나아간다.

  • 실제 컴퓨터에서 어떻게 풀 것인가
  • 계산량은 얼마나 되는가
  • 반올림 오차는 어떻게 누적되는가
  • 해는 얼마나 안정적인가
  • 큰 행렬을 효율적으로 어떻게 처리할 것인가

등을 다룬다.


마무리

세 글에서 계속 같은 식을 보았다.

$$ Ax=b $$

하지만 관점은 조금씩 달랐다.

첫 번째 글에서는

$$ x\xrightarrow{A}b $$

라는 선형변환으로 보았다.

두 번째 글에서는 변환 과정에서 정보가 사라질 수 있고, 그 결과 역문제가 어려워질 수 있다는 점을 보았다.

세 번째 글에서는 현실의 연속적인 문제를 이산화하면 여러 개의 방정식이 생기고, 이를 행렬로 정리하면서 다시

$$ Ax=b $$

가 등장한다는 것을 보았다.

결국 선형대수에서 배우는 $Ax=b$는 단순히 연립방정식을 풀기 위한 표기법이 아니다.

컴퓨터그래픽스와 수치해석을 포함해 수많은 문제를 표현하는 공통 언어에 가깝다.

$$ \boxed{ \text{입력 또는 미지수} \xrightarrow{\text{관계 또는 변환}} \text{출력 또는 조건} } $$

이 관점을 가지고 보면 이후에 등장하는 행렬식, rank, inverse, least squares, eigenvalue, FEM 등의 개념도 서로 조금씩 연결되어 보이기 시작한다.