제목만 보면 이렇게 쉬운걸 여기다 왜 적을까? 라고 생각하시는 분들이 계실거라고 생각합니다.
우리가 중학교나 고등학교때 연필로 연립방정식을 풀었던 기억이 있습니다. 하지만 코딩에서는 어떻게 연립방정식을 풀까요? 아시는 분도 계시겠지만 생각보다 방법이 떠오르지 않을 수 있습니다. 이번에는 코디엥서는 어떻게 연립방정식을 풀이하는지 설명을 해보자 합니다.
다음과 같은 수식은 중고등학교를 성실히 하셨다면 쉽게 풀수 있는 연립방정식 문제입니다.
정답은 이 되겠지요.
하지만 코딩으로 어떻게 작성 할 지는 감을 잡기 어려울 것이라 생각합니다.
그래서 우리는 선형대수에 나오는 Crammer’s Rule를 이용하려고 합니다.
우선 기본적인 행렬 연산은 알고 있다고 생각하고 설명을 시작하겠습니다.
위의 연립방정식은 위처럼 행렬로 표현을 할 수 있습니다.
결론적으로 공식은 다음과 같습니다.
참고로 { }는 행렬을 나타내고 | |는 행렬식을 나타냅니다.
물론 사람이 계산하는데는 저렇게 행렬식을 사용하는것이 더욱 계산을 하는것이 어렵겠지만 행렬식 코드만 있으면 쉽게 계산을 할 수 있게됩니다.
행렬식 코드만 작성을 하게되면 쉽게 연립방정식을 계산할 수 있습니다.
그럼 처음부터 설명을 시작해 봅시다.
우선 Crammer’s rule는 다음을 이야기합니다.
다음을 만족하는 연립방정식을 해결하기 위해서는
처럼 행렬식을 알아야합니다. 2x2행렬을 저렇게 행렬식이 간단하기만 3x3부터는 행렬식이 복잡해집니다. 물론 많은 언어 라이브러리에 det 라는 함수를 제공해서 어떤 크기의 삼각형이든 쉽게 행렬식을 계산할 수 있습니다. 그러면 위의 행렬식 공식을 이용하여 다음을 구하면 됩니다.
위식을 적용하기만 하면 연립방정식을 해결 할 수 있습니다.
사실 NxN행렬도 행렬의 크기만 다를뿐이지 위와같은 방식으로 해결을 할 수 있습니다.
더 쉬운 방법이 있을까요?
이것을 알기 위해서는 역행렬을 알아야합니다.
라고 행렬을 정의하면
라는 간단한 식으로 나타낼 수 있습니다.
우리는 을 나타내는 역행렬 B를 구할 수 있습니다.
B를 A의 역행렬이라고 하면
라고 표현을 할 수 있습니다. 참고로 단위행렬 I는 숫자 1을 곱한것 처럼 곱한수에 아무런 변화가 없습니다. 이렇게 되면 matrix연산이 지원하는 라이브러리 에서는 inv(A)만 곱해주면 바로 연립방정식이 해결되이 된다는 것을 알 수 있습니다.
이상으로 방정식을 구하는 대략적인 2가지를 설명을 하였습니다. 다음번에는 여러 언어별로 어떻게 코딩을 하는지 살펴보도록 하겠습니다.