어떤 행렬에 대한 계산을 필요로 하는 소스코드를 작성중이라 해보자. 이제 코딩을 하던 중에 어떤 반복문을 작성해야 하는데, 일단 행렬 이 주어져 있고 이 행렬 의 행렬식(determinant)역행렬을 계산했다고 하자. 이제 이 반복문에서 행렬이 계수(rank)가 1인 행렬 에 의해 로 갱신되었다고 한다면 (즉, 행렬 이 rank one update가 되었다면), 이 새로운 행렬 의 행렬식과 역행렬을 어떻게 하면 비교적 빠르게 구할 수 있을까?
물론 의 행렬식과 역행렬을 직접 구할 수도 있다. 하지만 행렬식이나 역행렬을 구하는 계산복잡도(computational complexity)가 일반적으로 정도이기 때문에, 각각의 반복문에서 새로운 행렬 의 행렬식과 역행렬을 매번 구해야만 한다면, 그만큼 코딩의 처리 속도가 늦어지게 될 것이다. 하지만, 현재 행렬 의 행렬식과 역행렬을 미리 알고 있다는 가정 하에, 새롭게 갱신된 행렬 의 행렬식과 역행렬을 의 행렬식과 역행렬을 이용하여 표현할 수 있는 방법이 있다면, 계산복잡도를 상당히 줄일 수 있을 것이다.
이번 글에서는 먼저 주어진 행렬 에 대하여, 가 계수가 인 행렬 에 의해 갱신되었을 때의 행렬식을 비교적 빠르게 구하는 방법을 알려주는 행렬식 보조정리(matrix determinant lemma)에 대해서 알아볼 것이다. 이 새로운 행렬의 역행렬을 구하는 셔먼-모리슨 공식(Sherman–Morrison formula)에 대해서는 다음 글에서 천천히 다뤄보도록 하자.
행렬식 보조정리(Matrix Determinant Lemma)
먼저 다음의 두 사실을 증명 없이 받아 들이기로 하자.
두 행렬의 곱의 행렬식은 두 행렬의 행렬식의 곱과 같다: 임의의 행렬 에 대하여,
임의의 행렬 , , , 와 영행렬 에 대하여,
증명.가 임의의 열벡터이고 이 영벡터라 하자. 그러면 직접 계산을 통해 아래의 등식이 성립함을 간단히 확인할 수 있다.
이제 위 등식의 양변에 행렬식 연산을 적용하자. 그러면 좌변의 첫 행렬과 마지막 행렬은 (대각 원소들이 모두 인 삼각 행렬이므로) 행렬식 을 갖는다. 또한 좌변의 가운데 행렬의 행렬식은 임을 알 수 있다. 또한 우변의 행렬식은 와 같으므로, 이를 종합하면
를 얻는다.
이제 임의의 가역행렬 와 열벡터 에 대하여,
따라서 위 정리가 성립한다.
위 정리로부터 다음의 따름 정리를 얻는다.
증명. 먼저 가 가역행렬이라고 가정하자. 그러면 이므로,
따라서 임의의 가역행렬 에 대하여 위 따름정리가 성립한다.
만약 가 가역행렬이 아니라면, 를 가역행렬들의 수열 의 극한으로 생각할 수 있다. 이제 딸림행렬을 하나의 함수로 이해해 보자. 즉, 함수 에 대하여, 행렬 의 함숫값 는 각 원소가 의 여인수(cofactor)들로 이루어진 행렬히다. 이 때, 각각의 여인수들은 의 소행렬(submatrix)의 행렬식에 또는 이 곱해진 형태이기 때문에, 모두 다항함수라 생각할 수 있다. 따라서 의 각 원소들은 의 원소들에 대한 다항함수의 형태로 수어지기 때문에, 는 연속함수임을 알 수 있다. 따라서 일 때, 가 성립하고,
가 성립한다.
예제., 을 만족하는 임의의 실수 에 대하여,
가 가역행렬임을 증명하여라.
풀이.이 단위행렬, 가 모든 성분이 인 열벡터라 하자. 그러면 와 같이 나타낼 수 있다. 이제 이라는 사실을 이용하면