2020년 9월 5일 토요일

블록 행렬(Block Matrix)

[경고] 아래 글을 읽지 않고 "블록 행렬"을 보면 바보로 느껴질 수 있습니다.


[그림 1] 행렬 원소의 정의(출처: wikipedia.org)

행렬(matrix)의 원소는 [그림 1]처럼 스칼라(scalar)로 정의함이 원칙이다. 하지만 행렬의 원소가 매우 많은 경우는 행렬 원소의 배치에 따라 구획(block)을 나누어서 부분 행렬(submatrix)로 정의하면 편리하다. 행렬의 원소를 구획으로 구분해 부분 행렬로 만든 후, 부분 행렬의 배치로 전체 행렬을 구성하는 행렬을 블록 행렬(block matrix)이라 한다. 블록 행렬의 원소는 행렬, 벡터(vector), 스칼라 등이 될 수 있다. 예를 들어 행렬 $\bf M$을 2행 2열로 구획한 블록 행렬로 표현할 수 있다.

                  (1)

여기서 ${\bf A}, {\bf B},{\bf C},{\bf D}$는 $\bf M$의 부분 행렬이다. 혹은 $m \times n$ 형태로 구획한 블록 행렬도 다음처럼 정의할 수 있다.

                  (2)

여기서 ${\bf M}_{ij}$는 $\bf M$의 부분 행렬이다. 블록 행렬의 연산은 일반 행렬의 연산과 거의 유사하다. 다만 블록 행렬의 원소는 일반적으로 행렬이기 때문에, 각 원소를 계산할 때 교환 법칙을 쓰면 안 된다. 예를 들어 가우스–요르단 소거법(Gauss–Jordan elimination)을 이용해 식 (1)의 역행렬을 블록 행렬 형태로 유도할 수 있다.

             (3)

따라서 식 (1)의 역행렬을 다음처럼 공식화할 수 있다.

             (4)

부분 행렬이 대각선 위치에만 있으면 블록 대각 행렬(block diagonal matrix)이라 한다.

                  (5)

역행렬 정의 ${\bf A A}^{-1}$ = $\bf I$를 이용하면 블록 대각 행렬의 역행렬은 다음과 같다.

                  (6)

블록 대각 행렬의 행렬식은 각 부분 행렬에 대한 행렬식의 곱이다.

                  (7)

식 (7)은 라플라스 전개(Laplace expansion)를 이용해 쉽게 증명할 수 있다. 블록 대각 행렬의 대각합(trace)도 각 부분 행렬에 대한 대각합의 합으로 표현할 수 있다. 

                  (8)

부분 행렬을 삼각 행렬 형태로 배치하면 블록 삼각 행렬(block triangular matrix)이 된다. 블록 삼각 행렬은 블록 상삼각 행렬(block upper triangular matrix)블록 하삼각 행렬(block lower triangular matrix)로 나눈다.

                  (9)

                  (10)

행렬 $\bf A$가 순열 행렬(permutation matrix) $\bf P$에 의해 다음처럼 블록 상삼각 행렬이 된다면, $\bf A$를 가약 행렬(可約行列, reducible matrix)이라 부른다.

                  (11)

여기서 ${\bf B},{\bf C},{\bf D}$는 $\widetilde{\bf A}$의 부분 행렬, ${\bf B}$와 ${\bf D}$는 정방 행렬(square matrix)이다. 행렬 $\bf A$의 양쪽에 순열 행렬을 곱하면, 순열(permutation)에 따라 행과 열이 동시에 바꾸어진다. 이로 인해 행이 바뀌면 열도 같은 규칙으로 바뀌어서 $\widetilde{a}_{ij}$ = $a_{\sigma_i \sigma_j}$가 성립한다. 여기서 $\sigma$는 $\bf P$를 구성하는 순열이다. 가약 행렬이 될 수 없으면 기약 행렬(旣約行列, irreducible matrix)이라 한다. 기약 행렬 개념은 프로베니우스Ferdinand Georg Frobenius(1849–1917)가 1912년프로베니우스 63세, 일제 강점기 시절에 제안했다. 가약 행렬의 개념을 이해하기 위해 변형된 연립 방정식 $\widetilde{\bf A}{\bf x}$ = $\bf k$를 부분 행렬 관점으로 써보자[1].

                  (11)

여기서 $\bf x$ = $[{\bf x}_1~{\bf x}_2]^T$, $\bf k$ = $[{\bf k}_1~{\bf k}_2]^T$이다. 가약 행렬의 조건에 의해 ${\bf B}$와 ${\bf D}$는 정방 행렬이므로, 식 (11)의 오른쪽 식은 잘 정의된다. 행렬 $\bf A$가 축약 가능[혹은 가약]이면, 처음에는 연립된 ${\bf x}_1$과 ${\bf x}_2$를 순열 행렬로 분리해서 더 풀기 쉬운 두 개의 행렬 방정식으로 간략화할 수 있다. 연립 방정식을 축약 혹은 간략화하지 못해서 ${\bf x}_1$과 ${\bf x}_2$를 있는 그대로 풀어야 한다면, ${\bf A}$는 기약이라 한다. 식 (11)을 보면 가약 행렬의 의미를 충분히 이해할 수 있다. 하지만 왜 굳이 프로베니우스는 큰 특징이 보이지 않는 기약 행렬을 정의했을까? 프로베니우스가 제안한 기약 행렬은 역행렬의 존재성을 판정하는 좋은 기준이다. 물론 행렬식을 계산하면 역행렬이 있을지 판정할 수 있지만 노력이 너무 많이 들어간다. 그래서 행렬이 대각 우세(diagonal dominance)인지 혹은 기약인지를 관찰해서 역행렬의 존재성을 판단한다.

[참고문헌]
[1] R. S. Varga, Matrix Iterative Analysis, 2nd ed., Berlin: Springer-Verlag, 1991.

댓글 없음 :

댓글 쓰기

욕설이나 스팸글은 삭제될 수 있습니다. [전파거북이]는 선플운동의 아름다운 인터넷을 지지합니다.