제목만 보면 이렇게 쉬운걸 여기다 왜 적을까? 라고 생각하시는 분들이 계실거라고 생각합니다. 우리가 중학교나 고등학교때 연필로 연립방정식을 풀었던 기억이 있습니다. 하지만 코딩에서는 어떻게 연립방정식을 풀까요? 아시는 분도 계시겠지만 생각보다 방법이 떠오르지 않을 수 있습니다. 이번에는 코디엥서는 어떻게 연립방정식을 풀이하는지 설명을 해보자 합니다.

$$ \begin{align} x + y = 2 \\ x - y = 0 \end{align} $$

다음과 같은 수식은 중고등학교를 성실히 하셨다면 쉽게 풀수 있는 연립방정식 문제입니다. 정답은 $x = 1, y = 1$이 되겠지요. 하지만 코딩으로 어떻게 작성 할 지는 감을 잡기 어려울 것이라 생각합니다. 그래서 우리는 선형대수에 나오는 Crammer’s Rule를 이용하려고 합니다.

우선 기본적인 행렬 연산은 알고 있다고 생각하고 설명을 시작하겠습니다.

$$ \left[ \begin{matrix} 1 & 1 \\ 1 & -1 \end{matrix}\right] \left[ \begin{matrix} x \\ y \end{matrix}\right]

\left[ \begin{matrix} 2 \\ 0 \end{matrix}\right] $$

위의 연립방정식은 위처럼 행렬로 표현을 할 수 있습니다. 결론적으로 공식은 다음과 같습니다.

$$ x =\frac{\left| \begin{matrix} 2 & 1 \\ 0 & -1 \end{matrix}\right|}{\left| \begin{matrix} 1 & 1 \\ 1 & -1 \end{matrix}\right|} \ y =\frac{\left| \begin{matrix} 1 & 2 \\ 1 & 0 \end{matrix}\right|}{\left| \begin{matrix} 1 & 1 \\ 1 & -1 \end{matrix}\right|} $$

참고로 { }는 행렬을 나타내고 | |는 행렬식을 나타냅니다. 물론 사람이 계산하는데는 저렇게 행렬식을 사용하는것이 더욱 계산을 하는것이 어렵겠지만 행렬식 코드만 있으면 쉽게 계산을 할 수 있게됩니다. 행렬식 코드만 작성을 하게되면 쉽게 연립방정식을 계산할 수 있습니다. 그럼 처음부터 설명을 시작해 봅시다. 우선 Crammer’s rule는 다음을 이야기합니다.

$$ \left[ \begin{matrix} a & b \\ c & d \end{matrix}\right] \left[ \begin{matrix} x \\ y \end{matrix}\right]

\left[ \begin{matrix} t \\ u \end{matrix}\right] $$

다음을 만족하는 연립방정식을 해결하기 위해서는

$$ \left| \begin{matrix} a & b \\ c & d \end{matrix}\right| = ad - bc $$

처럼 행렬식을 알아야합니다. 2x2행렬을 저렇게 행렬식이 간단하기만 3x3부터는 행렬식이 복잡해집니다. 물론 많은 언어 라이브러리에 det 라는 함수를 제공해서 어떤 크기의 삼각형이든 쉽게 행렬식을 계산할 수 있습니다. 그러면 위의 행렬식 공식을 이용하여 다음을 구하면 됩니다.

$$ x =\frac{\left| \begin{matrix} t & b \\ u & d \end{matrix}\right|}{\left| \begin{matrix} a & b \\ c & d \end{matrix}\right|} \ y =\frac{\left| \begin{matrix} a & t \\ c & u \end{matrix}\right|}{\left| \begin{matrix} a & b \\ c & d \end{matrix}\right|} $$

위식을 적용하기만 하면 연립방정식을 해결 할 수 있습니다. 사실 NxN행렬도 행렬의 크기만 다를뿐이지 위와같은 방식으로 해결을 할 수 있습니다.

더 쉬운 방법이 있을까요? 이것을 알기 위해서는 역행렬을 알아야합니다.

$$ A = \left[ \begin{matrix} a & b \\ c & d \end{matrix}\right] X = \left[ \begin{matrix} x \\ y \end{matrix}\right] C = \left[ \begin{matrix} t \\ u \end{matrix}\right] $$

라고 행렬을 정의하면

$$ AX=C $$

라는 간단한 식으로 나타낼 수 있습니다. 우리는 $AB = I \ I는 단위행렬$을 나타내는 역행렬 B를 구할 수 있습니다. B를 A의 역행렬이라고 하면

$$ BAX=BC \\ X = BC $$

라고 표현을 할 수 있습니다. 참고로 단위행렬 I는 숫자 1을 곱한것 처럼 곱한수에 아무런 변화가 없습니다. 이렇게 되면 matrix연산이 지원하는 라이브러리 에서는 inv(A)만 곱해주면 바로 연립방정식이 해결되이 된다는 것을 알 수 있습니다.

이상으로 방정식을 구하는 대략적인 2가지를 설명을 하였습니다. 다음번에는 여러 언어별로 어떻게 코딩을 하는지 살펴보도록 하겠습니다.