기본행 연산 할 때 가장 어려웠던 부분이 어떤 것을 먼저 교환하고, 치환하고, 가우스 소거를 적용하는지 찾는 것이었다. 수업 들으면서 교수님께서 매우 빠르게 계산하시는 것을 보고 놀랐던 기억만 남았다.
물론 빨리 푸는 게 중요한 것은 아니지만 효율적인 방식으로 접근하는 것이 추후 연산할 때 계산 실수를 줄일 수 있어서, 최대한 효율적으로 풀 수 있는 방식을 알고 싶었다. 먼저 기본행 연산은 다음과 같은 규칙을 갖고 있다.
교환(Interchange) : 두 행을 교환한다.
상수배(Scaling) : 한 행에 0이 아닌 상수배를 곱한다.
치환(Replacement) : 한 행에 0이 아닌 상수배를 한 뒤에 다른 행에 더한다. (= 가우스 소거)
제일 왼쪽 위부터 시작해서 아래 삼각형을 전부 0으로 만드는 것을 목표로 정한다. 위에서 아래 방향으로 진행하면서, 그 위에 작업했던 행은 더이상 건드리지 않는다.
피봇(Pivot)은 각 열마다 제일 처음이 0이 아닌 수를 의미한다. 피봇은 그 열을 대표하는 값이기 때문에, 무조건 1로 만들어 놓으면 나중에 헷갈리지 않는다.
제일 왼쪽 열부터 시작해서 첫번째를 1로 만들고, 그 1을 이용해서 아래를 전부 0으로 만들 수 있다.
소수나 분수를 먼저 만들면 계산이 점점 복잡해지기 때문에 가급적 피하는 게 좋다. 하지만 어쩔 수 없이 소수나 분수를 통해 계산을 해야 하는 경우도 있다.
이 때는 자연수 상태에서 먼저 간단한 행 연산을 끝내고, 마지막에 피봇을 1로 만들 때만 적용하면 된다.
피봇이 0이라면 당황스러울 수 있으나, 행을 교환해서 0이 아닌 수를 위로 올리면 된다. 특히 절댓값이 큰 수를 위로 올리면 큰 숫자로 인해 연산 과정에서 분수나 소수가 덜 나온다.
행 교환해도 되는 건가? 싶었는데 생각해보니 행 자체를 교환하는 거는 식 순서를 바꾸는 것과 다름이 없기 때문에 문제가 되지 않는 것이었다.