4.1. 행렬식
“행렬식”(Determinant)은 사실 행렬보다 먼저 사용된 개념입니다.
이는 독립적으로 개발 된 것이지만, 행렬과 잘 맞아서 보통 같이 사용하는 개념이 되었습니다.
행렬식의 정의는 정사각행렬에서만 사용가능하고, 행렬의 크기에 따라 다양하게 식을 구할 수 있습니다.
2×2 의 경우 \(A = \left[ \begin{array}{cc} a & b \\ c & d \\ \end{array} \right]\) 이면, \(| A | = (a * d) – (b * c)\) 가 되고,
3×3 의 경우 \(A = \left[ \begin{array}{cc} a & b & c \\ d & e & f \\ g & h & i \\ \end{array} \right]\) 이면,
\(| A | = (a*e*i) + (b*f*g) + (c*d*h)\) \(− (c*e*g) − (a*f*h) − (b*d*i)\) 가 됩니다.
( 이 방식을 “사러스 법칙”이라고도 표현합니다. )
4×4 의 경우 한 열또는 행을 잡고 소행렬식을 이용하여 행렬식을 정의할 수 있습니다.
예를 들어 4×4 행렬의 경우 \(det\) 값은 다음과 같이 정의 할 수 있습니다.
\((-1)^{i+1} · a_{i1} · det(minor_{i1}) + (-1)^{i+2} · a_{i2} · det(minor_{i2})\) \(+ (-1)^{i+3} · a_{i3} · det(minor_{i3}) + (-1)^{i+4} · a_{i4} · det(minor_{i4})\)
이 때, \(minor_{i1}\)은 \(a_{i1}\)의 “소행렬”(Minor)로 \(a_{i1}\)의 행과 열을 제외한 나머지 행과 열로 행렬을 만든 것입니다.
예시에서 \(a\)는 \(i\)행의 요소들을 사용한 구조이지만, \(a_{2i}\) 같은 \(i\)열의 요소들을 사용해서도 가능합니다.
소행렬을 이용한 행렬식을 구하는 방법은 3 × 3 이상의 행렬에서 모두 사용 가능 한 방법입니다.
줄여서, \(det(A_{n \times n}) = \Sigma^{n}_{j=1} (-1)^{k+j}a_{kj}det(minor_{kj}) (0 \le k \le n)\) 로 표현합니다.
위의 \(\Sigma^{n}_{j=1} (-1)^{k+j}a_{kj}det(minor_{kj})\) 에서 \((-1)^{k+j}det(minor_{kj})\)부분과 \(a_{kj}\)로 나눈다면,
\(C_{kj} = (-1)^{k+j}det(minor_{kj})\) => \(det(A_{n \times n}) = \Sigma^{n}_{j=1} a_{kj}C_{kj}\) 가 됩니다.
이 때, \(C_{kj}\)를 “여인수”( Cofactor )라고 정의하고, 위의 식을 “여인수 전개”(Cofactor Expansion)라고 표현합니다.
라플라스 전개 정리는 다음과 같습니다.
\(A_{n \times n} = [ a_{ij} ] : n \leq 2\) 임의의 \(i\)행과 \(j\)열에 대하여 두 가지 방식으로 \(det(A)\)를 구할 수 있습니다.
1). \(det(A) = a_{i1}C_{i1} + a_{i2}C_{i2} + \cdots + a_{in}C_{in}\)\( = \Sigma^{n}_{j=1}a_{ij}C_{ij}\) ( \(i\)행 전개 )
2). \(det(A) = a_{1j}C_{1j} + a_{2j}C_{2j} + \cdots + a_{nj}C_{nj}\)\( = \Sigma^{n}_{j=1}a_{ij}C_{ij}\) ( \(j\)열 전개 )
라플라스 전개의 꿀 팁은 \(a_{ij}\)쪽이 0이면 계산량이 크게 줄기 때문에 잘 선택하면 굉장히 빠르게 구할 수도 있습니다.
또한, 같은 이치로 삼각행렬의 경우 값을 구해보면 일차 곱셈들만으로도 나타낼 수 있음을 알 수 있습니다.
다음은 행렬식의 주요 성질 6가지를 나열 한 것입니다.
두 정사각행렬 \(A = [a_{ij}]\)와 \(B = [b_{ij}]\)가 정의 될 때,
1). \(A\)에 \(0\)행(또는 \(0\)열)이 있다면, \(det(A) = 0\) 입니다.
2). \(A\)의 두 행(또는 두 열)을 바꾼 행렬 \(A’\)를 정의 할 때, \(det(A’) = -det(A)\) 입니다.
3). \(A\)의 두 행(또는 두 열)이 같으면, \(det(A) = 0\) 입니다.
4). \(A\)의 한 행(또는 열)을 \(k\)배한 행렬 \(A’\)를 정의 할 때, \(det(A’) = k det(A)\)
5). 행렬 \(C\)의 \(i\)행(또는 \(i\)열)이 \(A\)의 \(i\)행(또는 \(i\)열)과 \(B\)의 \(i\)행(또는 \(i\)열) 의 합이고, 나머지는 세 행렬이 동일하다면,
\(det(C) = det(A) + det(B)\) 입니다.
6). \(A\)의 한 행(또는 열)의 스칼라배를 \(A\)의 다른 행(또는 열)에 더한 \(A’\)를 정의 할 때, \(det(A’) = det(A)\) 입니다.
위의 주요성질을 응용하면 기본행렬 \(E\)에 대해 다음 세 가지를 유도 할 수 있습니다.
1). \(E\)가 항등행렬에서 서로 다른 두 행을 바꿔놓은 행렬이면 \(det(E) = -1\) 입니다.
2). \(E\)가 항등행렬에서 한 행을 \(k\)배 하여 얻은 행렬이면 \(det(E) = k\) 입니다.
3). \(E\)가 항등행렬에서 한 행을 상수배하여 다른 행에 더한 행렬이면 \(det(E) = 1\) 입니다.
다음은 행렬식에 대한 추가적인 정리 가지를 나열 한 것입니다.
1). 두 정사각행렬 \(A, B\)가 정의 될 때, \(det(AB) = det(A)det(B)\) 가 성립합니다.
2). 정사각행렬 \(A\)와 상수 \(k\)가 정의 될 때, \(det(kA) = k^n det(A)\) 가 성립합니다.
3). 정사각행렬 \(A\)가 정의 될 때, \(det(A) = det(A^T)\) 가 성립합니다.
행렬식을 이용하여 \(n\)개의 미지수를 가지는 \(n\)개로 구성된 연립 일차방정식의 해를 구하는 공식으로
“크래머 법칙”(Cramer`s rule)을 사용할 수 있습니다. 크래머 법칙은 다음과 같습니다.
정의 하기전 먼저, \(A_i(b)\) 는 \(A\)의 \(i\)번째 열을 \(b\)로 바꾼 행렬이라고 정의합니다.
가역행렬 \(A\)와 \(b\)를 \(\mathbb{R}^n\) 의 벡터라고 정의한다면, \(Ax = b\)의 유일한 해는 다음과 같습니다.
\(x_i = \frac{det( A_i(b) )}{det(A)} ( 1 \leq i \leq n )\)추가로, \(b\)를 기저벡터 \(e_j\)로 둔다면, \(Ax_j = e_j\) 가 되고,
이 식은 크래머법칙을 적용하면 특이한 식을 얻어 낼 수 있습니다.
\(x_{ij} = \frac{det(A_i(e_j))}{det(A)}\)\( = \frac{(-1)^{j+i}det(A_{ji}) = C_{ji}}{det(A)}\) 가 성립합니다.
위의 \(C_{ji}\)는 \(C_{ij}^T\) 로도 표현가능하고 행렬로 한 번에 표기한 것을 \(A\)의 “수반(adjoint) 행렬”라고 표현합니다.
( 즉, \(C_{ji} = C_{ij}^T = \begin{bmatrix}
C_{11} & C_{21} & \cdots & C_{n1} \\
C_{12} & C_{22} & \cdots & C_{n2} \\
\vdots & \vdots & \ddots & \vdots \\
C_{1n} & C_{2n} & \cdots & C_{nn} \\
\end{bmatrix}\) 일 것 입니다. )
수반 행렬은 \(adj(A)\)로도 표현가능하고, 이후 4.2. 역행렬을 구하는데 크게 사용되는 개념입니다.
4.2. 역행렬
\(A\)가 정사각행렬 \(n × n\) 일 때, \(A × A^{-1} = A^{-1}×A = I_{n×n}\) 인
“\(A^{-1}\)“을 \(A\)의 “역행렬”(Inverse Matrix 또는 \(A’\))이라고 표현합니다.
(이 때, 행렬에는 나눗셈이 정의되지 않으므로, \(A^{-1}\)은 \(A\)의 역수가 아니고 \(\frac{1} {A}\) 로 표현하지 않습니다.)
\(A\)에 따라 \(A\)의 역행렬이 존재할 수도 존재하지 않을 수도 있는데
존재한다면, \(A\)를 “가역행렬”(Invertible Matrix)이라고 표현하고
존재하지 않는다면, \(A\)를 “비가역행렬”(Non-Invertible Matrix)이라고 표현합니다.
\(A\)가 가역행렬이면, \(A\)의 역행렬은 유일합니다.
다음은 가역행렬의 성질에 대해 나열 한 것입니다.
1). \(A\) 가 가역행렬이면, \(A^{-1}\) 도 가역행렬이고 \((A^{-1})^{-1} = A\)
2). \(A\) 가 가역행렬이고 \(c\)가 \(0\)이 아닌 스칼라 이면, \(c · A\) 도 가역행렬이고 \((c * A)^{-1} = \frac{1} {c} * A^{-1}\)
3). \(A\) 와 \(B\) 가 같은 크기의 가역행렬이면, \(A × B\)도 가역행렬이고 \((A × B)^{-1} = B^{-1} × A^{-1}\)
4). \(A\) 가 가역행렬이면, \(A^T\) 도 가역행렬이고, \((A^T)^{-1} = (A^{-1})^T\)
5). \(A\) 가 가역행렬이면, \(n > 0 , n ∈ ℕ => A^n\) 도 가역행렬 이고, \((A^n)^{-1} = (A^{-1})^n = A^{-n}\)
다음은 역행렬에 대한 행렬식의 성질 세 가지를 나열 한 것입니다.
1). 정사각행렬 \(A\)가 가역행렬일 필요 충분 조건은 \(det(A) \neq 0\) 입니다.
( 즉, 어떠한 행렬 \(A\)의 행렬식 \(| A |\) 가 \(0\) 이면, \(A\)는 비가역행렬이 되고, \(0\)이 아니면 \(A\)는 가역행렬이 됩니다. )
2). 가역행렬 \(A\)가 존재 할 때, \(det(A^{-1}) = \frac{1}{det(A)}\) 입니다.
3). 가역행렬 \(A\)가 존재 할 때, \(A^{-1} = \frac{1}{det(A)}adj(A)\) 입니다.
단위행렬에 기본 행변환 한 것을 \(E\) 라 할 때, ( 기본 행변환은 2.2절에 설명되어 있습니다. )
\(E\) 를 어떤 행렬 \(A\)에 곱했을 때, \(E × A\) 는 \(A\)의 기본 행변환 한 행렬 중 하나 \(A’\) 이 되고,
\(A’\) 행렬은 단위행렬이 \(E\) 가 될 때, 바꾼 위치와 동일하게 바뀐 행렬입니다.
이 때, 가능한 모든 \(E × A\) 들을 “기본행렬”(Elementary Matrix)이라고 표현합니다.
어떠한 가역행렬 \(A\)에 대해 \(A\)의 모든 기본행렬의 역행렬은 \(A^{-1}\)의 기본행렬들에 포함됩니다.
\(A\)가 정사각행렬이고 가역행렬 이라면 다음의 성질들을 만족합니다.
1). \(ℝ^n\)에서 임의의 \(b\) 에 대해, \(A · \vec{x} = b\) 는 유일한 해를 갖습니다.
2). \(A · \vec{x} = 0\) 의 해는 반드시 자명한 해 입니다.
3). \(A\) 의 기약 행사다리꼴은 \(I_{n×n}\) 입니다.
4). \(A\) 는 기본행렬들의 곱으로 표현됩니다.
역행렬의 계산하기 위해서 첨가행렬 \([A | I_{n×n} ]\) 을 만들어 기본 행변환을 시도하여
\([ I_{n×n} | A^{-1} ]\) 을 만들어서 역행렬을 구할 수 있습니다.
이 방법을 우리가 이미 배운 “가우스-조르단 소거법”(Gauss-Jordan Elimination)입니다.
이전에 배운 가우스-조르단 소거법은 우항이 행렬이 아니지만,
좌항이 기약 행사다리꼴인 것과 기본행변환으로 구하는 방법이 유사하여 같은 방법이라 볼 수 있습니다.
( 2.3절에 정의되어 있습니다. )
4.3. LU 분해
어떠한 행렬이 정의 될 때, 이 행렬을 상삼각 행렬과 하삼각 행렬로 분해 할 수 있습니다.
어떠한 행렬 \(A\)가 기본 행변환을 시행하여 \(U\)로 만들 수 있다면,
만드는 과정에서 기본 행변환 한 내용들을 단위행렬에 하삼각 행렬의 형태로 저장하여
기본 행변환 들을 곱한 결과와 \(U\)를 곱한 결과가 \(A\)가 되도록 하는
기본 행변환 들을 곱한 결과를 \(L\)로 나타낼 수 있고,
이 때, \(A = L × U\) 가 성립합니다. 이를 “\(LU\) 분해”라고 표현합니다.
그렇다면, 어떻게 단위행렬에서 기본 행변환 내용들을 추가하여 \(L\)로 나타 낼 수 있을까요?
가우스 소거법을 진행 할 때, 행을 교환 하거나 다른행의 스칼라 배한 값과 더해서 상삼각 행렬을 만들었습니다.
이 때, 다른 행의 스칼라 배한 값과 더하는 방법을 \(R_i – kR_j\) 꼴로 나타낼 수 있었는데,
이 때, \(k\)를 “승수”(mutliplier)라고 표현합니다.
항등행렬 \(I\) 에서 위에 내용을 반대로 \(R_j + kR_i\) 꼴로 역 순서대로 모두 진행하면 \(L\)을 얻어낼 수 있습니다.
하지만, 가우스 소거법에는 위의 연산 뿐만 아니라 행 교환도 연산에 포함되는데,
이를 표현하려면 반드시 하삼각 행렬 또는 상삼각 행렬이 깨지게 됩니다.
그래서 \(L\)과 \(U\)를 깨지 않고 치환 행렬 \(P\)를 따로 정의하여 이 문제를 해결합니다.
생각해보면 치환은 중복되지 않기 때문에 해당 연산에서 모든 치환내용을 하나의 행렬로 나타낼 수 있을 것입니다.
치환 행렬은 항등행렬 \(I\)에서 치환한 내역을 동일 하게 적용하면 얻어낼 수 있습니다.
치환행렬 \(P\)는 초기에 \(A\)에 값을 곱하여 \(LU\)분해가 되도록 하기 위해 사용되기 때문에,
초기 행렬 \(A\)에 대해 \(P×A = L×U\)가 되도록, \(P\)를 위의 내용에 맞게 얻어내면 됩니다.
여기서, 위의 식을 고쳐보면 \(A = P^{-1}×L×U\) 가 됩니다.
\(P\)는 항등행렬 \(I\)를 단순 치환으로 나타낸 행렬이기 때문에 \(P\)는 반드시 직교행렬이 됩니다.
(즉, 항등행렬 \(I\)를 단순 치환한 \(P\)에 대해 \(P^{-1} = P^T\) 가 반드시 성립합니다. )
따라서, \(A = P^{-1}×L×U = P^T×L×U\) 가 되고, 이를 “\(P^TLU\) 분해” 라고 표현합니다.