6.17 블록 행렬과 분할 연산
1. 블록 행렬의 개념
블록 행렬(block matrix)은 행렬의 성분을 개별 스칼라 단위가 아니라 부분 행렬(submatrix) 단위의 격자로 분할하여 표현한 것이다. 블록 표기는 큰 행렬의 구조를 드러내고, 부분적으로 동일한 형태가 반복되는 경우 연산의 효율성을 극대화하며, 이론적 분석에서도 행렬의 의미 있는 부분을 명시적으로 분리하는 도구로 사용된다. 본 절에서는 블록 행렬의 정의, 분할 연산의 규칙, 그리고 로봇공학에서의 활용을 체계적으로 정리한다.
2. 블록 행렬의 정의
정의 6.17.1 (블록 행렬). m \times n 행렬 A를 행 방향으로 m_1, m_2, \ldots, m_p (\sum m_i = m)로, 열 방향으로 n_1, n_2, \ldots, n_q (\sum n_j = n)로 분할할 때, A는 다음과 같이 부분 행렬 A_{ij} \in \mathbb{R}^{m_i \times n_j}의 격자로 표현된다.
A = \begin{bmatrix} A_{11} & A_{12} & \cdots & A_{1q} \\ A_{21} & A_{22} & \cdots & A_{2q} \\ \vdots & \vdots & \ddots & \vdots \\ A_{p1} & A_{p2} & \cdots & A_{pq} \end{bmatrix}
이러한 분할을 행렬 A의 적합 분할(conformal partition)이라 한다. 분할은 행렬의 구조에 따라 자연스럽게 결정되거나, 계산의 편의를 위해 인위적으로 도입될 수 있다.
블록 행렬의 기본 연산
블록 덧셈
두 블록 행렬 A와 B가 동일한 분할 구조를 가질 때, 덧셈은 대응하는 블록끼리 수행된다.
(A + B)_{ij} = A_{ij} + B_{ij}
이는 일반 행렬 덧셈의 자연스러운 확장이다.
2.1 블록 스칼라 곱
스칼라 k와 블록 행렬 A의 곱은 각 블록에 k를 곱한 것이다.
(kA)_{ij} = k A_{ij}
블록 곱셈
블록 행렬의 곱셈은 일반 행렬 곱셈과 유사한 형태로 수행되지만, 각 항이 스칼라 곱이 아니라 부분 행렬의 곱이라는 점이 다르다.
정리 6.17.1 (블록 곱셈). 블록 행렬 A가 p \times q 블록 분할을 가지고, 블록 행렬 B가 q \times r 블록 분할을 가질 때, 모든 A_{ik}와 B_{kj}의 곱 A_{ik} B_{kj}가 정의되도록 분할이 적합하다면 다음이 성립한다.
(AB)_{ij} = \sum_{k=1}^{q} A_{ik} B_{kj}
이때 A의 열 분할과 B의 행 분할이 일치해야 한다는 적합성 조건이 필수이며, 부분 곱의 순서는 블록 곱이 비가환적이므로 절대 변경할 수 없다.
2.2 블록 전치
블록 행렬의 전치는 각 블록의 위치를 전치하고, 동시에 각 블록 자체도 전치한다.
\left( \begin{bmatrix} A_{11} & A_{12} \\ A_{21} & A_{22} \end{bmatrix} \right)^\top = \begin{bmatrix} A_{11}^\top & A_{21}^\top \\ A_{12}^\top & A_{22}^\top \end{bmatrix}
특수 형태의 블록 행렬
블록 대각 행렬
비대각 블록이 모두 영행렬인 정방 블록 행렬을 블록 대각 행렬(block diagonal matrix)이라 한다.
D = \text{diag}(A_1, A_2, \ldots, A_k) = \begin{bmatrix} A_1 & & & \\ & A_2 & & \\ & & \ddots & \\ & & & A_k \end{bmatrix}
블록 대각 행렬은 다음의 편리한 성질을 가진다.
- \det(D) = \prod_{i=1}^{k} \det(A_i)
- D^{-1} = \text{diag}(A_1^{-1}, \ldots, A_k^{-1}) (각 A_i가 가역일 때)
- D \cdot D' = \text{diag}(A_1 A_1', \ldots, A_k A_k') (호환되는 블록 분할)
2.3 블록 삼각 행렬
대각선 위쪽 또는 아래쪽의 블록이 모두 영행렬인 정방 블록 행렬을 블록 삼각 행렬이라 한다.
U = \begin{bmatrix} A_{11} & A_{12} & \cdots & A_{1k} \\ & A_{22} & \cdots & A_{2k} \\ & & \ddots & \vdots \\ & & & A_{kk} \end{bmatrix}
블록 삼각 행렬의 행렬식은 대각 블록의 행렬식의 곱과 같다.
\det(U) = \prod_{i=1}^{k} \det(A_{ii})
2.4 \times2 블록 행렬
가장 빈번히 등장하는 형태는 다음의 2\times2 블록 행렬이다.
M = \begin{bmatrix} A & B \\ C & D \end{bmatrix}
여기서 A가 가역이라 하자. 이때 슈어 보수(Schur complement)는 다음과 같이 정의된다.
M / A = D - C A^{-1} B
슈어 보수를 이용하면 다음의 행렬식 공식과 역행렬 공식이 성립한다.
\det(M) = \det(A) \cdot \det(D - C A^{-1} B)
M^{-1} = \begin{bmatrix} A^{-1} + A^{-1} B (M/A)^{-1} C A^{-1} & -A^{-1} B (M/A)^{-1} \\ -(M/A)^{-1} C A^{-1} & (M/A)^{-1} \end{bmatrix}
이 공식은 큰 행렬의 역행렬을 작은 행렬의 역행렬로 환원하는 데 사용되며, 카르만 필터의 정보 형식, 제약 조건이 있는 최적화의 KKT 시스템, 다물체 동역학의 연결 제약 처리 등에 본질적으로 사용된다.
3. 블록 LU 분해
2\times2 블록 행렬은 가역 A가 존재할 때 다음과 같이 블록 LU 분해된다.
\begin{bmatrix} A & B \\ C & D \end{bmatrix} = \begin{bmatrix} I & 0 \\ C A^{-1} & I \end{bmatrix} \begin{bmatrix} A & B \\ 0 & D - C A^{-1} B \end{bmatrix}
이 분해를 통해 큰 선형계를 두 개의 작은 선형계로 분할하여 풀 수 있다. 첫 번째 단계에서 A \mathbf{x}_1 + B \mathbf{x}_2 = \mathbf{b}_1로부터 \mathbf{x}_1을 \mathbf{x}_2에 관해 표현하고, 두 번째 단계에서 슈어 보수 시스템을 풀어 \mathbf{x}_2를 결정한 뒤, 다시 첫 번째 식에 대입하여 \mathbf{x}_1을 얻는다.
블록 분할의 의의
블록 분할은 단순한 표기 편의를 넘어서 다음의 실질적 이점을 제공한다.
1. 구조 분리: 행렬의 의미 있는 부분(예: 회전 부분과 병진 부분)을 명시적으로 구분하여 이론적 분석을 단순화한다.
2. 계산 효율: 큰 행렬의 연산을 작은 부분 행렬의 연산으로 분할하여 캐시 지역성과 병렬 처리를 향상시킨다. BLAS 라이브러리의 레벨 3 루틴은 블록 곱셈을 기반으로 한다.
3. 희소성 활용: 영블록을 가진 분할은 곱셈에서 해당 항을 생략할 수 있어 연산량을 크게 줄인다.
4. 분할 정복: 큰 문제를 작은 부분 문제로 환원하여 재귀적 알고리즘을 가능하게 한다. 스트라센 알고리즘은 대표적인 예이다.
로봇공학에서의 응용
동차 변환 행렬의 블록 구조
3차원 강체의 동차 변환 행렬 {}^A T_B는 회전 부분과 병진 부분을 분리한 2\times2 블록 행렬로 표현된다.
{}^A T_B = \begin{bmatrix} {}^A R_B & {}^A \mathbf{p}_{B_{\text{org}}} \\ \mathbf{0}^\top & 1 \end{bmatrix}
여기서 {}^A R_B \in SO(3)은 3 \times 3 회전 블록이고, {}^A \mathbf{p}_{B_{\text{org}}} \in \mathbb{R}^3은 병진 블록이다. 동차 변환 행렬의 곱은 블록 곱셈의 규칙에 따라 다음과 같이 계산된다.
{}^A T_C = {}^A T_B \cdot {}^B T_C = \begin{bmatrix} {}^A R_B \cdot {}^B R_C & {}^A R_B \cdot {}^B \mathbf{p}_{C_{\text{org}}} + {}^A \mathbf{p}_{B_{\text{org}}} \\ \mathbf{0}^\top & 1 \end{bmatrix}
또한 동차 변환 행렬의 역변환은 일반 역행렬 계산이 아니라 블록 구조를 활용하여 다음과 같이 효율적으로 계산된다.
{}^A T_B^{-1} = \begin{bmatrix} {}^A R_B^\top & -{}^A R_B^\top \cdot {}^A \mathbf{p}_{B_{\text{org}}} \\ \mathbf{0}^\top & 1 \end{bmatrix}
3.1 자코비안의 블록 분할
매니퓰레이터의 기하학적 자코비안은 선속도 자코비안과 각속도 자코비안의 블록으로 분할된다.
J(\mathbf{q}) = \begin{bmatrix} J_v(\mathbf{q}) \\ J_\omega(\mathbf{q}) \end{bmatrix} \in \mathbb{R}^{6 \times n}
이 분할을 통해 작업 공간에서의 선속도 제어와 각속도 제어를 분리하여 다룰 수 있으며, 가중 행렬을 통해 둘 사이의 단위 차이를 보정하는 가중 자코비안 의사 역행렬도 정의된다.
KKT 시스템의 블록 구조
제약 조건이 있는 이차 최적화 문제
\min_{\mathbf{x}} \frac{1}{2} \mathbf{x}^\top H \mathbf{x} + \mathbf{c}^\top \mathbf{x}, \quad \text{subject to } A\mathbf{x} = \mathbf{b}
의 KKT 조건은 다음의 블록 선형계를 만든다.
\begin{bmatrix} H & A^\top \\ A & 0 \end{bmatrix} \begin{bmatrix} \mathbf{x} \\ \boldsymbol{\lambda} \end{bmatrix} = \begin{bmatrix} -\mathbf{c} \\ \mathbf{b} \end{bmatrix}
이 블록 시스템을 해석할 때 슈어 보수 -A H^{-1} A^\top이 핵심적 역할을 하며, 다물체 동역학에서 구속력 계산, 모델 예측 제어에서의 등호 제약 처리에 본질적으로 사용된다.
칼만 필터에서의 공분산 분할
다중 좌표 또는 다중 객체를 동시에 추정하는 칼만 필터에서 상태 공분산 행렬은 다음과 같이 블록으로 분할된다.
P = \begin{bmatrix} P_{xx} & P_{xy} \\ P_{xy}^\top & P_{yy} \end{bmatrix}
대각 블록은 각 부분 상태의 자체 공분산을, 비대각 블록은 두 부분 상태 사이의 상관 관계를 나타낸다. 이 구조는 SLAM에서 로봇 자세와 지도의 상관 관계 추정에 본질적이다.
3.2 다관절 로봇의 관성 행렬 분할
여유 자유도 로봇의 관성 행렬은 작업 공간 자코비안을 이용한 좌표 분리에서 블록 형태로 표현된다.
M(\mathbf{q}) = \begin{bmatrix} M_{11} & M_{12} \\ M_{12}^\top & M_{22} \end{bmatrix}
이러한 분할은 작업 공간 동역학(operational space dynamics)의 유도와, 관성 분리에 의한 분리 제어 설계에 활용된다.
정보 행렬의 분할과 주변화
그래프 SLAM에서 정보 행렬 \Omega = \Sigma^{-1}의 블록 분할은 주변화(marginalization) 연산의 효율적 구현을 가능하게 한다. 한 부분 변수를 주변화할 때 슈어 보수가 그 결과 정보 행렬을 직접 제공한다.
참고문헌
- Strang, G. (2023). Introduction to Linear Algebra (6th ed.). Wellesley-Cambridge Press.
- Horn, R. A., & Johnson, C. R. (2012). Matrix Analysis (2nd ed.). Cambridge University Press.
- Golub, G. H., & Van Loan, C. F. (2013). Matrix Computations (4th ed.). Johns Hopkins University Press.
- Boyd, S., & Vandenberghe, L. (2004). Convex Optimization. Cambridge University Press.
Version: 1.0