2.4 Rules for Matrix Operation
행렬곱 접근법
m×n 행렬 A와 n×p 행렬 B를 곱하면, 결과 행렬 AB의 형상은 m×p이다.
(m×n)(n×p)=(m×p)
이때 B의 모든 열은 A와 곱해진다.
열 기반 접근법에서는 B를 열벡터들의 묶음으로 보고, A를 각각의 열벡터에 곱한다.
AB=A[b1 b2]=[Ab1 Ab2]
행렬곱에서 중요한 사실은 결합법칙이 성립한다는 것이다.
(AB)C=A(BC)
행렬곱의 순서를 바꿀 수는 없지만, 괄호를 치는 순서는 바꿀 수 있다. 이때 계산 순서에 따라 연산 횟수가 크게 달라질 수 있다.
첫 번째 접근법: A의 행과 B의 열의 내적
AB의 각 원소는 내적으로 계산된다.
(AB)ij=(row i of A)⋅(column j of B)
즉, AB의 (i,j) 원소는 A의 i번째 행과 B의 j번째 열의 내적이다.
일반적으로 두 행렬 A(m×n)과 B(n×p)의 곱은 다음과 같이 계산된다.
(AB)ij=k=1∑naikbkj
결과 행렬 AB는 m×p개의 원소를 가진다. 각 원소를 계산하려면 길이 n짜리 내적을 수행해야 한다.
따라서 일반적인 사각행렬의 경우 연산 횟수는 다음과 같다.
O(mnp)
특히 n×n 정방행렬끼리 곱하는 경우 시간 복잡도는 다음과 같다.
O(n3)
정리하면 다음과 같다.
mp개의 dot product가 있고, 각 dot product는 n단계로 계산된다.
형상은 다음처럼 볼 수 있다.
[m rowsn columns][n rowsp columns]=[m rowsp columns]
두 번째 접근법: Column Picture
Column picture에서는 B를 여러 개의 열벡터로 나누어 본다.
B=[b1 ⋯ bp]
그러면 행렬곱은 다음과 같다.
A[b1 ⋯ bp]=[Ab1 ⋯ Abp]
즉, AB의 각 열은 A에 B의 각 열을 곱한 결과이다.
세 번째 접근법: Row Picture
Row picture에서는 A의 각 행이 B 전체와 곱해진다고 본다.
예를 들어 A의 i번째 행을 B에 곱하면, 그 결과가 AB의 i번째 행이 된다.
[row i of A]147258369=[row i of AB]
즉, AB의 각 행은 A의 해당 행이 B와 곱해진 결과이다.
네 번째 접근법: A의 열과 B의 행
네 번째 접근법은 외적(outer product) 기반이다.
A의 열벡터와 B의 행벡터를 곱하면 하나의 행렬이 만들어진다.
(column i)(row i)
여기서 A의 열은 m×1이고, B의 행은 1×p이다.
따라서 두 벡터의 곱은 m×p 행렬이 된다.
(m×1)(1×p)=(m×p)
행렬곱 AB는 이러한 외적 행렬들의 합으로 표현된다.
AB=(col 1)(row 1)+(col 2)(row 2)+⋯+(col n)(row n)
예를 들어 다음 행렬곱을 보자.
AB=[acbd][EGFH]
일반적인 방식으로 계산하면 다음과 같다.
AB=[aE+bGcE+dGaF+bHcF+dH]
이를 외적 기반으로 보면 다음과 같다.
AB=[ac][EF]+[bd][GH]
즉, A의 열과 B의 행을 곱한 행렬들의 합으로 AB를 얻을 수 있다.
행렬 연산의 규칙
1. 행렬 덧셈
행렬 덧셈에서는 교환 법칙이 성립한다.
A+B=B+A
분배 법칙도 성립한다.
c(A+B)=cA+cB
결합 법칙도 성립한다.
A+(B+C)=(A+B)+C
2. 행렬 곱셈
행렬 곱셈에서는 교환 법칙이 일반적으로 성립하지 않는다.
AB=BA
분배 법칙은 성립한다.
A(B+C)=AB+AC
(A+B)C=AC+BC
결합 법칙도 성립한다.
A(BC)=(AB)C
단위행렬은 행렬곱에서 1과 비슷한 역할을 한다.
IA=A
또한 크기가 맞는 경우 다음도 성립한다.
AI=A
3. 행렬 제곱
행렬의 거듭제곱은 같은 행렬을 반복해서 곱한 것이다.
Ap=AAAA⋯A
여기서 A는 총 p번 곱해진다.
같은 행렬의 거듭제곱끼리는 다음이 성립한다.
(Ap)(Aq)=Ap+q
또한 다음도 성립한다.
(Ap)q=Apq
주의할 점은 행렬의 음수 제곱은 역행렬을 의미한다는 것이다.
A−1
이는 일반 스칼라의 음수 제곱인 a1와 완전히 같은 개념은 아니다. 행렬에서는 역행렬이 존재할 때만 A−1을 정의할 수 있다.
블록 행렬과 블록 곱셈
블록 행렬은 큰 행렬을 작은 행렬, 즉 블록으로 쪼개어 보는 방식이다.
예를 들어 다음 행렬은 여러 개의 단위행렬 블록으로 볼 수 있다.
A=101001011010010110100101=[IIIIII]
전체 행렬의 크기가 일치하고 블록 사이즈가 맞다면, 행렬 덧셈은 각 위치의 블록끼리 더해서 계산할 수 있다.
블록 행렬의 곱셈도 일반 행렬곱과 비슷하게 계산된다.
[A11A21A12A22][B11B21]=[A11B11+A12B21A21B11+A22B21]
이때 A의 열 방향 분할과 B의 행 방향 분할이 서로 일치해야 한다.
즉, A의 열 사이의 컷이 B의 행 사이의 컷과 맞아야 블록 곱셈이 가능하다.
외적을 이용한 행렬곱 예시
행렬곱은 외적의 합으로도 계산할 수 있다.
[1145][3120]=[11][32]+[45][10]
각 외적을 계산하면 다음과 같다.
=[3322]+[4500]
따라서 결과는 다음과 같다.
=[7822]
블록 소거
블록 소거는 기존 가우스 소거법의 아이디어를 블록 행렬에 적용한 것이다.
다음 블록 행렬을 생각한다.
[ACBD]
여기서 피벗 블록은 A이다. 일반 소거법에서 피벗 원소 a에 해당한다.
소거 대상은 A 아래에 있는 C 블록이다. 일반 소거법에서 제거 대상 c에 해당한다.
일반 소거법에서는 두 번째 행에서 첫 번째 행에 ac를 곱한 것을 뺀다.
블록 소거법에서는 두 번째 블록 행에서 첫 번째 블록 행에 어떤 행렬을 곱한 것을 뺀다.
목표는 C 위치에 영행렬이 오도록 만드는 것이다.
블록 소거 과정
두 번째 블록 행은 다음과 같다.
[C D]
첫 번째 블록 행은 다음과 같다.
[A B]
두 번째 블록 행에서 첫 번째 블록 행에 어떤 행렬 X를 곱한 것을 뺀다고 하자.
[C D]−X[A B]
C 위치를 0으로 만들려면 다음을 만족해야 한다.
C−XA=0
따라서 X는 다음과 같다.
X=CA−1
즉, 두 번째 블록 행에서 첫 번째 블록 행에 CA−1을 곱한 것을 빼면 된다.
이 연산을 행렬로 표현하면 다음과 같다.
Eblock=[I−CA−10I]
이 행렬은 다음 연산을 수행한다.
CA−1× 첫 번째 블록 행을 두 번째 블록 행에서 뺀다.
실제로 곱하면 다음과 같다.
[I−CA−10I][ACBD]=[A0BD−CA−1B]
각 블록을 보면 다음과 같다.
(2,1) 블록은 다음과 같다.
(−CA−1)A+IC=−C+C=0
(2,2) 블록은 다음과 같다.
(−CA−1)B+ID=D−CA−1B
슈어 보완(Schur Complement)
소거를 수행한 뒤, (2,2) 위치에 새롭게 나타난 블록을 슈어 보완이라고 한다.
S=D−CA−1B
이 블록을 A에 대한 슈어 보완이라고 부른다.
일반적인 2×2 행렬의 소거 결과와 형태가 같다.
숫자에서는 다음과 같은 꼴이다.
d−acb
블록에서는 다음과 같은 꼴이다.
D−CA−1B
즉, 큰 행렬을 A,B,C,D라는 블록으로 나누었을 때, A를 피벗으로 사용하여 C를 0으로 만드는 과정에서 슈어 보완이 자연스럽게 등장한다.
슈어 보완은 행렬식 계산이나 선형 방정식 풀이 등에서 유용하게 사용된다.
예를 들어 A−1이 존재할 때 다음 관계가 성립한다.
det[ACBD]=det(A)det(D−CA−1B)
정리
1. AB의 (i,j) 원소
AB의 (i,j) 원소는 A의 i번째 행과 B의 j번째 열의 점곱이다.
(AB)ij=(row i of A)⋅(column j of B)
예를 들어 다음 두 행렬을 보자.
A=[1324],B=[5768]
AB의 (1,2) 원소는 다음과 같이 계산한다.
- A의 1번째 행: [12]
- B의 2번째 열: [68]
따라서 점곱은 다음과 같다.
(1×6)+(2×8)=22
2. 행렬곱의 연산량
m×n 행렬과 n×p 행렬을 곱하면 m×p 행렬이 나온다.
(m×n)(n×p)=(m×p)
결과 행렬은 총 m×p개의 원소를 가진다.
각 원소 하나를 계산하려면 길이 n짜리 내적이 필요하므로 n번의 곱셈이 필요하다.
따라서 전체 곱셈 횟수는 다음과 같다.
mnp
3. 행렬곱의 결합 법칙
행렬곱에서는 결합 법칙이 성립한다.
A(BC)=(AB)C
행렬의 순서 A,B,C를 바꾸는 것은 불가능하지만, 곱셈을 수행하는 괄호의 위치는 바꿀 수 있다.
이 법칙이 중요한 이유는 계산 효율성 때문이다.
예를 들어 A가 10×100, B가 100×5, C가 5×50 행렬이라고 하자.
먼저 (AB)C로 계산하면 다음과 같다.
- AB 계산: 10×100×5=5,000
- (AB)C 계산: 10×5×50=2,500
- 총합: 7,500
반대로 A(BC)로 계산하면 다음과 같다.
- BC 계산: 100×5×50=25,000
- A(BC) 계산: 10×100×50=50,000
- 총합: 75,000
즉, 결합 법칙은 성립하지만 계산 순서에 따라 연산 횟수는 크게 달라질 수 있다.
또한 이 법칙이 성립하기 때문에 A3=AAA 같은 행렬의 거듭제곱이 잘 정의된다.
4. 행렬곱은 외적의 합으로도 표현된다
AB는 A의 j번째 열과 B의 j번째 행을 곱한 n개 행렬의 합으로 볼 수 있다.
A를 n개의 열벡터 cj로 나누고, B를 n개의 행벡터 rj로 나누면 다음과 같다.
AB=j=1∑ncjrj
즉,
AB=c1r1+c2r2+⋯+cnrn
여기서 cj는 m×1 벡터이고, rj는 1×p 벡터이다.
따라서 cjrj는 m×p 행렬이 된다.
이를 외적이라고 한다.
5. 블록 곱셈
블록의 모양이 올바르게 맞는다면 블록 곱셈이 허용된다.
[A11A21A12A22][B11B21B12B22]=[A11B11+A12B21A21B11+A22B21A11B12+A12B22A21B12+A22B22]
이 계산이 성립하려면 블록의 크기가 맞아야 한다.
예를 들어 다음 조건이 필요하다.
- A11의 열 개수와 B11의 행 개수가 같아야 한다.
- A12의 열 개수와 B21의 행 개수가 같아야 한다.
- 즉, A 행렬의 수직 분할이 B 행렬의 수평 분할과 일치해야 한다.
6. 블록 소거와 슈어 보완
블록 소거는 다음 블록 행렬에서 시작한다.
M=[ACBD]
여기서 A−1이 존재한다고 가정한다.
C 위치를 0으로 만들기 위해 다음 블록 소거 행렬을 곱한다.
[I−CA−10I]
그러면 다음과 같이 소거된다.
[I−CA−10I][ACBD]=[A0BD−CA−1B]
이때 새롭게 나타나는 블록
D−CA−1B
를 슈어 보완이라고 한다.