2.3 행렬의 성질

행렬은 여러 개의 숫자로 이루어져 있으므로 실수처럼 부호나 크기를 정의하기 어렵다. 하지만 부호/크기와 유사한 개념은 정의할 수 있다. 여기에서는 이러한 개념을 살펴본다.

정부호와 준정부호

영 벡터가 아닌 모든 벡터 \(x\)에 대해 다음 부등식이 성립하면 행렬 \(A\)가 **양의 정부호(positive definite)**라고 한다.

\[ \begin{align} x^T A x > 0 \tag{2.3.1} \end{align} \]

만약 이 식이 등호를 포함한다면 **양의 준정부호(positive semi-definite)**라고 한다.

\[ \begin{align} x^T A x \geq 0 \tag{2.3.2} \end{align} \]

위 방법에 따르면 모든 행렬에 대해 양의 정부호와 준정부호를 정의할 수 있지만 보통 대칭행렬에 대해서만 정의한다.

예를 들어 항등행렬(identity matrix) \(I\)는 양의 정부호다. 다음 식에서 벡터 \(x\)가 영벡터(zeros-vector)가 아니라는 점에 주의한다.

\[\begin{split} \begin{align} x^T I x = \begin{bmatrix} x_1 & x_2 & \cdots & x_N \end{bmatrix} \begin{bmatrix} 1&0&\cdots&0\\ 0&1&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&1\\ \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_N \end{bmatrix} = x_1^2 + x_2^2 + \cdots + x_N^2 > 0 \tag{2.3.3} \end{align} \end{split}\]

다음과 같은 행렬도 양의 정부호다.

\[\begin{split} \begin{align} A = \begin{bmatrix} 2&-1&0\\-1&2&-1\\0&-1&2 \end{bmatrix} \tag{2.3.4} \end{align} \end{split}\]

이는 다음처럼 증명할 수 있다.

모든 벡터 \(x^T = [x_1 \; x_2 \; x_3]\)에 대해

\[\begin{split} \begin{align} \begin{aligned} x^TA x &= \begin{bmatrix} x_1 & x_2 & x_3 \end{bmatrix} \begin{bmatrix} 2&-1&0\\-1&2&-1\\0&-1&2 \end{bmatrix} \begin{bmatrix} x_1\\x_2\\x_3 \end{bmatrix} \\ &= \begin{bmatrix} (2x_1-x_2)&(-x_1+2x_2-x_3)&(-x_2+2x_3) \end{bmatrix} \begin{bmatrix} x_1\\x_2\\x_3 \end{bmatrix} \\ &= 2{x_1}^2 - 2x_1x_2 + 2{x_2}^2 - 2x_2x_3 + 2{x_3}^2 \\ &= {x_1}^2+(x_1 - x_2)^{2} + (x_2 - x_3)^{2}+{x_3}^2 \end{aligned} \tag{2.3.5} \end{align} \end{split}\]

이 성립한다. 그리고 이 값은 제곱의 합으로 이루어졌으므로 \(x\)가 영벡터인 경우(\(x_1 = x_2 = x_3 = 0\))를 제외하고는 항상 0보다 크다.

\[ \begin{align} {x_1}^2+(x_1 - x_2)^{2} + (x_2 - x_3)^{2}+{x_3}^2 > 0 \tag{2.3.6} \end{align} \]

연습 문제 2.3.1

다음 행렬이 양의 정부호인지 양의 준정부호인지 혹은 어떤 것에도 해당되지 않는지 판단하라.

\[\begin{split} \begin{align} \begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix} \tag{2.3.7} \end{align} \end{split}\]

행렬의 부호와 마찬가지로 행렬 크기를 정의하는 것도 어려운 일이다. 하나의 행렬에 대해 실수 하나를 대응시키는 개념의 놈(norm), 대각합(trace), **행렬식(determinant)**이란 연산은 크기와 유사한 개념이다.

행렬 놈

행렬의 **놈(norm)**은 행렬 \(A\)에 대해 다음 식으로 정의되는 숫자다. 보통 \(\Vert A \Vert_p\)로 표기한다. 이 식에서 \(a_{ij}\)는 행렬 \(A\)\(i\)번째 행, \(j\)번째 열의 원소다. 행렬의 놈에도 여러 정의가 있는데 여기에서는 요소별 행렬 놈(entrywise matrix norm)의 정의를 따른다.

\[ \begin{align} \Vert A \Vert_p = \left( \sum_{i=1}^N \sum_{j=1}^M |a_{ij}|^p \right)^{1/p} \tag{2.3.8} \end{align} \]

\(p\)는 보통 1, 2 또는 무한대(\(\infty\))가 사용되는데 이 중 \(p=2\)인 경우가 가장 많이 쓰이므로 \(p\)값 표시가 없는 경우는 \(p=2\)인 놈이라고 생각하면 된다. \(p=2\)인 놈은 **프로베니우스 놈(Frobenius norm)**이라고 불리며 \(\Vert A \Vert_F\)이라고 표기하기도 한다.

\[ \begin{align} \Vert A \Vert = \Vert A \Vert_2 = \Vert A \Vert_F = \sqrt{\sum_{i=1}^N \sum_{j=1}^M a_{ij}^2} \tag{2.3.9} \end{align} \]

놈의 정의에서 놈은 항상 0보다 같거나 크다는 것을 알 수 있다.

놈은 모든 크기의 행렬에 대해서 정의할 수 있으므로 벡터에 대해서도 정의할 수 있다. 벡터의 놈에서 중요한 성질은 벡터의 놈의 제곱이 벡터의 제곱합과 같다는 것이다.

\[ \begin{align} \Vert x \Vert^2 = \sum_{i=1}^N x_{i}^2 = x^Tx \tag{2.3.10} \end{align} \]

놈은 0 또는 양수이므로 놈의 제곱이 가장 작을 때 놈도 가장 작아진다. 따라서 놈을 최소화하는 것은 벡터의 제곱합을 최소화하는 것과 같다.

넘파이에서는 linalg 서브패키지의 norm() 명령으로 행렬의 놈을 계산할 수 있다.

import numpy as np

A = (np.arange(9) - 4).reshape((3, 3))
A
array([[-4, -3, -2],
       [-1,  0,  1],
       [ 2,  3,  4]])
np.linalg.norm(A)
7.745966692414834

연습 문제 2.3.2

행렬 \(A\), \((A \in \mathbf{R}^{N \times M})\)의 놈의 제곱 \(\Vert A \Vert^2\)이 그 행렬을 이루는 행 벡터 \(r_i\)의 놈의 제곱의 합 또는 열 벡터 \(c_i\)의 놈의 제곱의 합과 같음을 증명하라.

\[ \begin{align} \Vert A \Vert^2 = \sum_{i=1}^N \Vert r_i \Vert^2 = \sum_{j=1}^M \Vert c_j \Vert^2 \tag{2.3.11} \end{align} \]

사실 위에서 쓴 놈의 공식은 공식적인 정의가 아니다. 정확한 놈의 정의는 다음 4가지 성질이 성립하는 행렬 연산을 말한다. 이러한 연산이 여러 개 존재하기 때문에 놈의 정의도 다양하다.

  • 놈의 값은 0이상이다. 영행렬일 때만 놈의 값이 0이 된다.

\[ \begin{align} \|A\|\ge 0 \tag{2.3.12} \end{align} \]
  • 행렬에 스칼라를 곱하면 놈의 값도 그 스칼라의 절대값을 곱한 것과 같다.

\[ \begin{align} \|\alpha A\|=|\alpha| \|A\| \tag{2.3.13} \end{align} \]
  • 행렬의 합의 놈은 각 행렬의 놈의 합보다 작거나 같다.

\[ \begin{align} \|A+B\| \le \|A\|+\|B\| \tag{2.3.14} \end{align} \]
  • 정방행렬의 곱의 놈은 각 정방행렬의 놈의 곱보다 작거나 같다.

\[ \begin{align} \|AB\| \le \|A\|\|B\| \tag{2.3.15} \end{align} \]

대각합

**대각합(trace)**은 정방행렬에 대해서만 정의되며 다음처럼 대각원소의 합으로 계산된다.

\[ \begin{align} \text{tr}(A) = a_{11} + a_{22} + \dots + a_{NN}=\sum_{i=1}^{N} a_{ii} \tag{2.3.16} \end{align} \]

예를 들어 \(N\)차원 항등행렬(identity matrix)의 대각합은 \(N\)이다.

\[ \begin{align} \text{tr}(I_N) = N \tag{2.3.17} \end{align} \]

대각합을 구할 때는 절댓값을 취하거나 제곱을 하지 않기 때문에 대각합의 값은 놈과 달리 음수가 될 수도 있다.

대각합은 다음과 같은 성질이 있다. 아래의 식에서 \(c\)는 스칼라이고 \(A, B, C\)는 행렬이다.

  • 스칼라를 곱하면 대각합은 스칼라와 원래의 대각합의 곱이다.

\[ \begin{align} \text{tr} (cA) = c\;\text{tr} (A) \tag{2.3.18} \end{align} \]
  • 전치연산을 해도 대각합이 달라지지 않는다.

\[ \begin{align} \text{tr} (A^T) = \text{tr} (A) \tag{2.3.19} \end{align} \]
  • 두 행렬의 합의 대각합은 두 행렬의 대각합의 합이다.

\[ \begin{align} \text{tr} (A + B) = \text{tr} (A) + \text{tr} (B) \tag{2.3.20} \end{align} \]
  • 두 행렬의 곱의 대각합은 행렬의 순서를 바꾸어도 달라지지 않는다.

\[ \begin{align} \text{tr} (AB) = \text{tr} (BA) \tag{2.3.21} \end{align} \]
  • 세 행렬의 곱의 대각합은 다음과 같이 순서를 순환시켜도 달라지지 않는다.

\[ \begin{align} \text{tr} (ABC) = \text{tr} (BCA) = \text{tr} (CAB) \tag{2.3.22} \end{align} \]

마지막 식은 곱셈에서 순서가 바뀌어도 대각합이 같다는 것을 이용하여 증명할 수 있다.

\[ \begin{align} \text{tr} ((AB)C) = \text{tr} (C(AB)) = \text{tr} ((CA)B) = \text{tr} (B(CA)) \tag{2.3.23} \end{align} \]

특히 마지막 식은 **트레이스 트릭(trace trick)**이라고 하여 이차 형식(quadratic form)의 미분을 구하는 데 유용하게 사용된다. 이 두 식에서는 \(A, B, C\)가 각각 정방행렬일 필요는 없다. 최종적으로 대각합을 구하는 행렬만 정방행렬이기만 하면 된다.

이차 형식의 트레이스 트릭 공식은 다음과 같다.

\[ \begin{align} x^TAx = \text{tr}(x^TAx) = \text{tr}(Axx^T) = \text{tr}(xx^TA) \tag{2.3.24} \end{align} \]

이 식은 원래의 트레이스 트릭 식의 \(A\), \(B\), \(C\) 에 각각 \(x^T\), \(A\), \(x\)를 대입한 것이다. 이차 형식은 스칼라값이기 때문에 대각합을 취해도 원래의 값과 같다.

넘파이에서는 trace() 명령으로 대각합을 계산할 수 있다.

np.trace(np.eye(3))
3.0

연습 문제 2.3.3

\(x\), \(A\)가 각각 크기가 2 인 벡터, 크기가 2x2 인 정방행렬일 때 이차 형식의 트레이스 트릭이 성립함을 보인다.

연습 문제 2.3.4

\(N \times M\) 행렬 \(X\)에 대해 다음 식을 증명하라.

\[ \begin{align} \text{tr}(X(X^TX)^{-1}X^T) = M \tag{2.3.25} \end{align} \]

위 식에서 \((X^TX)^{-1}\)\(X^TX\)의 역행렬(inverse matrix)로 \(X^TX\)와 곱하면 항등행렬이 되는 행렬이다. 역행렬에 대해서는 나중에 자세히 공부한다.

\[ \begin{align} (X^TX)^{-1}X^TX = X^TX(X^TX)^{-1} = I \tag{2.3.26} \end{align} \]

연습 문제 2.3.5

행렬 \(A \, (A \in \mathbf{R}^{2 \times 2})\)의 놈의 제곱 \(\Vert A \Vert^2\)이 다음과 같음을 증명하라.

\[ \begin{align} \Vert A \Vert^2 = \text{tr}(A^TA) \tag{2.3.27} \end{align} \]

행렬식

정방행렬 \(A\)의 **행렬식(determinant)**은 \(\text{det}(A)\), \(\text{det}A\), 또는 \(|A|\)라는 기호로 표기한다.

행렬식은 다음처럼 재귀적인 방법으로 정의된다.

우선 행렬 \(A\)\(1\times 1\) 즉 스칼라인 경우에는 행렬식이 자기 자신의 값이 된다.

\[ \begin{align} \det \left( \begin{bmatrix}a\end{bmatrix} \right) = a \tag{2.3.28} \end{align} \]

행렬 \(A\)가 스칼라가 아니면 **여인수 전개(cofactor expansion)**라고 불리는 다음 식을 이용하여 계산한다. 이 식에서 \(a_{i,j}\)\(A\)\(i\)행, \(j\)열 원소이고 \(i_0\)(또는 \(j_0\))는 계산하는 사람이 임의로 선택한 행번호(또는 열번호)이다.

\[ \begin{align} \det(A) = \sum_{i=1}^N \left\{ (-1)^{i+j_0}M_{i,j_0} \right\} a_{i,j_0} \tag{2.3.29} \end{align} \]

또는

\[ \begin{align} \det(A) = \sum_{j=1}^N \left\{ (-1)^{i_0+j} M_{i_0,j} \right\} a_{i_0,j} \tag{2.3.30} \end{align} \]

위에서 ‘또는’이라고 한 이유는 두 식 중 아무거나 써도 같은 결과가 나오기 때문이다. 즉, 행렬에서 임의의 행 \(i_0\) 하나를 선택하거나 임의의 열 \(j_0\) 하나를 선택한 다음 이 값에 가중치 \((-1)^{i+j_0}M_{i,j_0}\) 또는 \( (-1)^{i_0+j} M_{i_0,j}\)를 곱하여 더한 것이다.

가중치로 사용된 \(M_{i,j}\)는 **마이너(minor, 소행렬식)**라고 하며 정방행렬 \(A\) 에서 \(i\)행과 \(j\)열을 지워서 얻어진 (원래의 행렬보다 크기가 1만큼 작은) 행렬의 행렬식이다.

마이너값도 행렬식이므로 마찬가지로 위의 정의를 이용하여 계산한다. 이처럼 점점 크기가 작은 행렬의 행렬식을 구하다 보면 스칼라인 행렬이 나오게 되는데 행렬식의 값이 자기 자신이 된다. 따라서 행렬식을 구하는 방법은 **재귀적(recursive)**이다.

마이너에 \((-1)^{i+j}\)를 곱한 값 \((-1)^{i+j}M_{i,j}\)을 **여인수(cofactor)**라고 하며 \(C_{i,j}\)로 표기한다.

\[ \begin{align} C_{i,j} = (-1)^{i+j}M_{i,j} \tag{2.3.31} \end{align} \]

여인수를 사용하여 위 여인수 전개식을 다시 표현하면 다음과 같다.

\[ \begin{align} \det(A) = \sum_{i=1}^N C_{i,j_0} a_{i,j_0} = \sum_{j=1}^N C_{i_0,j} a_{i_0,j} \tag{2.3.32} \end{align} \]

예를 들어 다음과 같은 행렬을 생각해보자.

\[\begin{split} \begin{align} \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7&8&9\\ \end{bmatrix} \tag{2.3.33} \end{align} \end{split}\]

여기에서 임의의 행 또는 열을 선택한다. 행이든 열이든 상관없다.

만약 첫 번째 열을 선택했다고 하면(\(j_0=1\)), 이 행렬의 행렬식은 다음처럼 계산한다.

\[\begin{split} \begin{align} \begin{aligned} \det(A) &= \left\{ (-1)^{1+1}M_{1,1} \right\} a_{1,1} + \left\{ (-1)^{2+1}M_{2,1} \right\} a_{2,1} + \left\{ (-1)^{3+1}M_{3,1} \right\} a_{3,1} \\ &= M_{1,1} a_{1,1} - M_{2,1} a_{2,1} + M_{3,1} a_{3,1} \\ &= M_{1,1} - M_{2,1} \cdot 4 + M_{3,1} \cdot 7 \end{aligned} \tag{2.3.34} \end{align} \end{split}\]

이때 마이너값 \(M_{1,1}\), \(M_{2,1}\), \(M_{3,1}\)는 각각 다음과 같은 행렬의 행렬식이다.

\(M_{1,1}\)은 원래의 행렬에서 \(1\)번째 행과 \(1\)번째 열을 지워서 만들어진 행렬의 행렬식이다.

\[\begin{split} \begin{align} \begin{aligned} \begin{bmatrix} \cancel{1}&\cancel{2}&\cancel{3}\\ \cancel{4}&5&6\\ \cancel{7}&8&9\\ \end{bmatrix} \;\; \rightarrow \;\; M_{1,1} = \det \left( \begin{bmatrix}5&6\\8&9\end{bmatrix} \right) \end{aligned} \tag{2.3.35} \end{align} \end{split}\]

\(M_{2,1}\)은 원래의 행렬에서 \(2\)번째 행과 \(1\)번째 열을 지워서 만들어진 행렬의 행렬식이다.

\[\begin{split} \begin{align} \begin{aligned} \begin{bmatrix} \cancel{1}&2&3\\ \cancel{4}&\cancel{5}&\cancel{6}\\ \cancel{7}&8&9\\ \end{bmatrix} \;\; \rightarrow \;\; M_{2,1} = \det \left( \begin{bmatrix}2&3\\8&9\end{bmatrix} \right) \end{aligned} \tag{2.3.36} \end{align} \end{split}\]

\(M_{3,1}\)은 원래의 행렬에서 \(3\)번째 행과 \(1\)번째 열을 지워서 만들어진 행렬의 행렬식이다.

\[\begin{split} \begin{align} \begin{aligned} \begin{bmatrix} \cancel{1}&2&3\\ \cancel{4}&5&6\\ \cancel{7}&\cancel{8}&\cancel{9}\\ \end{bmatrix} \;\; \rightarrow \;\; M_{3,1} = \det \left( \begin{bmatrix}2&3\\5&6\end{bmatrix} \right) \end{aligned} \tag{2.3.37} \end{align} \end{split}\]

이 마이너값 \(M_{1,1}\), \(M_{2,1}\), \(M_{3,1}\)은 마찬가지로 여인수 공식을 이용해서 계산할 수 있다.

예를 들어 \(M_{1,1}\)을 구하는 데 있어 첫 번째 행을 선택하기로 했다고 하자(\(i_0=1\)), 그럼 여인수 전개식은 다음과 같아진다.

\[ \begin{align} M_{1,1} = \left\{ (-1)^{1+1}M'_{1,1} \right\} a'_{1,1} + \left\{ (-1)^{2+1}M'_{1,2} \right\} a'_{1,2} \tag{2.3.38} \end{align} \]
\[\begin{split} \begin{align} \begin{aligned} \begin{bmatrix} \cancel{5}&\cancel{6}\\ \cancel{8}&9 \end{bmatrix} \;\; \rightarrow \;\; M'_{1,1} = \det([9]) = 9 \end{aligned} \tag{2.3.39} \end{align} \end{split}\]
\[\begin{split} \begin{align} \begin{aligned} \begin{bmatrix} \cancel{5}&\cancel{6}\\ 8&\cancel{9} \end{bmatrix} \;\; \rightarrow \;\; M'_{1,2} = \det([8]) = 8 \end{aligned} \tag{2.3.40} \end{align} \end{split}\]
\[ \begin{align} M_{1,1} = 9 \cdot 5 - 8 \cdot 6 = -3 \tag{2.3.41} \end{align} \]

마찬가지 방법으로

\[ \begin{align} M_{2,1} = -6 \tag{2.3.42} \end{align} \]
\[ \begin{align} M_{3,1} = -3 \tag{2.3.43} \end{align} \]

가 되고 원래의 행렬식의 값은

\[ \begin{align} \det(A) = -3 - (-6)\cdot 4 + (-3) \cdot 7 = 0 \tag{2.3.44} \end{align} \]

넘파이에서는 linalg 서브패키지의 det() 명령으로 행렬식을 계산할 수 있다.

A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.linalg.det(A)
-9.51619735392994e-16

위의 정의를 사용하면 크기가 2x2, 3x3인 정방행렬의 행렬식의 값은 다음 공식으로 계산할 수 있다.

  • 2×2 행렬의 행렬식

\[\begin{split} \begin{align} \det \left( \begin{bmatrix}a&b\\c&d\end{bmatrix} \right) = ad-bc \tag{2.3.45} \end{align} \end{split}\]
  • 3×3 행렬의 행렬식

\[\begin{split} \begin{align} \det \left( \begin{bmatrix}a&b&c\\d&e&f\\g&h&i\end{bmatrix} \right) =aei+bfg+cdh-ceg-bdi-afh \tag{2.3.46} \end{align} \end{split}\]

행렬식의 값도 대각합과 마찬가지로 음수가 될 수 있다.

연습 문제 2.3.6

행렬식의 정의를 사용하여 2x2 행렬과 3x3 행렬의 행렬식이 각각 위와 같이 된다는 것을 증명하라.

행렬식은 다음과 같은 성질을 만족한다.

  • 전치 행렬의 행렬식은 원래의 행렬의 행렬식과 같다.

\[ \begin{align} \det(A^{T}) = \det(A) \tag{2.3.47} \end{align} \]
  • 항등 행렬의 행렬식은 1이다.

\[ \begin{align} \det(I) = 1 \tag{2.3.48} \end{align} \]
  • 두 행렬의 곱의 행렬식은 각 행렬의 행렬식의 곱과 같다.

\[ \begin{align} \det(AB) = \det(A)\det(B) \tag{2.3.49} \end{align} \]
  • 역행렬 \(A^{-1}\)은 원래의 행렬 \(A\)와 다음 관계를 만족하는 정방행렬을 말한다. \(I\)는 항등 행렬(identity matrix)이다.

\[ \begin{align} A^{-1} A = A A^{-1} = I \tag{2.3.50} \end{align} \]
  • 역행렬의 행렬식은 원래의 행렬의 행렬식의 역수와 같다.

\[ \begin{align} \det(A^{-1}) = \dfrac{1}{\det(A)} \tag{2.3.51} \end{align} \]

위 식은 역행렬의 정의와 여인수 전개식을 사용하여 증명할 수 있다.

\[ \begin{align} \det(A) \det(A^{-1}) = \det{I} = 1 \tag{2.3.52} \end{align} \]

연습 문제 2.3.7

다음 행렬이 양의 정부호인지, 양의 준정부호인지 혹은 두가지 중 어느것도 아닌지 판단하라. 그리고 행렬의 대각합과 행렬식을 구하라.

(1)

\[\begin{split} \begin{align} \begin{bmatrix} 2 & -1 & 0 \\ -1 & 2 & -1 \\ 0 & -1 & 2 \end{bmatrix} \tag{2.3.53} \end{align} \end{split}\]

(2)

\[\begin{split} \begin{align} \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} \tag{2.3.54} \end{align} \end{split}\]