선형대수학 Linear Algebra | |||
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: -5px -1px -11px" | <colbgcolor=#006ab8> 기본 대상 | 일차함수 · 벡터 · 행렬 · 선형 변환 | |
대수적 구조 | 가군(모듈) · 벡터 공간 · 내적 공간 · 노름 공간 | ||
선형 연산자 | <colbgcolor=#006ab8> 기본 개념 | 연립방정식(1차 · 2차) · 행렬곱 · 단위행렬 · 역행렬과 크라메르 공식 · 가역행렬 · 전치행렬 · 행렬식(라플라스 전개) · 주대각합 | |
선형 시스템 | 기본행연산과 기본행렬 · 가우스-조르당 소거법 · 행사다리꼴 · 행렬표현 · 라그랑주 보간법 | ||
주요 정리 | 선형대수학의 기본정리 · 차원 정리 · 가역행렬의 기본정리 · 스펙트럼 정리 | ||
기타 | 제곱근행렬 · 멱등행렬 · 멱영행렬 · 에르미트 행렬 · 야코비 행렬 · 방데르몽드 행렬 · 아다마르 행렬 변환 · 노름(수학) | ||
벡터공간의 분해 | 상사 · 고유치 문제 · 케일리-해밀턴 정리 · 대각화(대각행렬) · 삼각화 · 조르당 분해 | ||
벡터의 연산 | 노름 · 거리함수 · 내적 · 외적(신발끈 공식) · 다중선형형식 · ∇ · 크로네커 델타 | ||
내적공간 | 그람-슈미트 과정 · 수반 연산자(에르미트 내적) | ||
다중선형대수 | 텐서 · 텐서곱 · 레비치비타 기호 | }}}}}}}}} |
1. 개요
Matrix Multiplication행렬의 곱셈은 여타 행렬의 연산과 같이 '크기가 맞는' 경우에만 정의되는데, 행렬의 곱셈에서 '크기가 맞는다'는 것은 앞 행렬의 열의 수[1]와 뒷 행렬의 행의 수[2]가 같다는 것이다. 아래 곱셈의 정의를 보면 명확할 것이다.
곱셈 결과 나오는 행렬의 크기는
가 된다. 즉, 앞 행렬의 크기가 [math({\color{blue}m}\times n)]이고 뒷 행렬의 크기가 [math(n\times{\color{red}r})]인 경우, 곱셈 결과 나오는 행렬의 크기는 [math({\color{blue}m}\times{\color{red}r})]이 된다.
2. 부자연스럽게 정의되는 이유
행렬의 곱은 이렇게 꼬인다는 말이 나올 만큼 부자연스럽게 정의되는데, 이는 이런 부자연스러운 정의가 선형대수학의 기본정리에서의 선형변환과 행렬 사이의 함수의 합성과 행렬의 곱을 자유롭게 오갈 수 있도록 하기 때문이다. 이 부자연스러운 정의로 인해 유한차원 벡터공간 사이의 선형변환은 행렬의 곱으로 자유롭게 바꿔 쓸 수 있으며 반대도 물론 가능하다. 즉, 둘은 완전히 동일하게 기능한다.[3] 함수의 합성으로 이해하여 결합법칙은 성립하지만 교환법칙이 성립하지 않는 것도 이러한 관점으로 설명이 가능하다. 즉, 행렬은 선형대수학에서는 일종의 함수라고 할 수 있다.3. 계산 방법
두 행렬 [math(A, B)]가 각각 [math(m\times n, n\times r)] 행렬일 때,[math(A=\begin{pmatrix}a_{11} & a_{12} & \cdots & a_{1n} \\ {\color{blue}a_{21}} & {\color{blue}a_{22}} & {\color{blue}\cdots} & {\color{blue}a_{2n}} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn}\end{pmatrix}, B=\begin{pmatrix}{\color{red}b_{11}} & b_{12} & \cdots & b_{1r} \\ {\color{red}b_{21}} & b_{22} & \cdots & b_{2r} \\ {\color{red}\vdots} & \vdots & \ddots & \vdots \\ {\color{red}b_{n1}} & b_{n2} & \cdots & b_{nr}\end{pmatrix})]
이라고 하면 행렬의 곱 [math(AB)]는 [math(m\times r)] 행렬이며,[math(AB=\begin{pmatrix}\sum_k a_{1k}b_{k1} & \sum_k a_{1k}b_{k2} & \cdots & \sum_k a_{1k}b_{kr} \\ {\color{#C0C}\sum_k a_{2k}b_{k1}} & \sum_k a_{2k}b_{k2} & \cdots & \sum_k a_{2k}b_{kr} \\ \vdots & \vdots & \ddots & \vdots \\ \sum_k a_{mk}b_{k1} & \sum_k a_{mk}b_{k2} & \cdots & \sum_k a_{mk}b_{kr}\end{pmatrix})]
이다. (단, [math(k=1,2,...,n)])여기서 [math(AB)]의 [math(i)]행 [math(j)]열의 성분은 [math(\sum_k a_{ik}b_{kj})]로, [math(A)]의 [math(i)]행의 각 성분과 [math(B)]의 [math(j)]열의 대응되는 성분의 곱을 모두 합한 것과 같다. 예를 들어 [math(AB)]의 2행 1열의 성분은 [math(\color{#C0C}{\sum_k a_{2k}b_{k1}})]로, [math(A)]의 2행의 각 성분과 [math(B)]의 1열의 대응되는 성분끼리 모두 곱한 것을 합한 것과 같다. 따라서 [math(AB)]의 각 성분을 구하기 위해 필요한 [math(A, B)]의 성분의 개수는 각각 [math(n)]개임을 알 수 있다.
이를 보다 간단히 나타내면, 임의의 크기가 맞는 두 행렬 [math(A)], [math(B)]에 대하여
[math((AB)_{ij}=\sum_{k} A_{ik}B_{kj} )]
이 성립한다. 복소행렬일 경우 에르미트성에 의해
[math((AB)_{ij}=\sum_{k} \overline{A_{ik}}B_{kj} = \sum_{k} A_{ik}\overline{B_{kj}})]
로 바뀐다.
다음과 같이 생각하면 보다 이해하기 편하다. 행렬 [math(A, B)]에 대하여 그 곱 [math(AB)]를 구할 때,
[math(B)] | |
[math(A)] | [math(AB)] |
[math(A=\begin{pmatrix}1 & 2 \\ 3 & 4\end{pmatrix}, B=\begin{pmatrix}5 & 6 \\ 7 & 8\end{pmatrix})]
일 때,[math(\begin{pmatrix}5 & {\color{red}6} \\ 7 & {\color{red}8}\end{pmatrix})] | |
[math(\begin{pmatrix}{\color{blue}1} & {\color{blue}2} \\ 3 & 4\end{pmatrix})] | [math(\begin{pmatrix}19 & {\color{#C0C}22} \\ 43 & 50 \end{pmatrix})] |
- [math({\color{blue}A_{11}}\times{\color{red}B_{12}}+{\color{blue}A_{12}}\times{\color{red}B_{22}}={\color{#C0C}(AB)_{12}})]
- [math({\color{blue}1}\times{\color{red}6}+{\color{blue}2}\times{\color{red}8}={\color{#C0C}22})]
한편, [math(A)], [math(B)]에 허수단위 [math(i)]를 곱한 복소행렬의 곱을 생각해보자. 두 행렬 중 한 행렬의 허수부 부호가 반대가 되므로, 아래와 같이 된다.
[math(\begin{pmatrix}5i & {\color{red}6i} \\ 7i & {\color{red}8i}\end{pmatrix})] | |
[math(\begin{pmatrix}{\color{blue}i} & {\color{blue}2i} \\ 3i & 4i\end{pmatrix})] | [math(\begin{pmatrix}19 & {\color{#C0C}22} \\ 43 & 50 \end{pmatrix})] |
- [math({\color{blue}\overline{A_{11}}}\times{\color{red}B_{21}}+{\color{blue}\overline{A_{12}}}\times{\color{red}B_{22}} = {\color{blue}A_{11}}\times{\color{red}\overline{B_{21}}}+{\color{blue}A_{12}}\times{\color{red}\overline{B_{22}}} ={\color{#C0C}(\overline{A}B)_{12}} ={\color{#C0C}(A\overline{B})_{12}})]
- [math({\color{blue}-i}\times{\color{red}6i}+{\color{blue}-2i}\times{\color{red}8i} = {\color{blue}i}\times{\color{red}-6i}+{\color{blue}2i}\times{\color{red}-8i}={\color{#C0C}22})]
3.1. 예시
어느 학교에는 우등생을 따로 모아서 교육시키는 특별반인 '우수반'과 '수학반'이 있으며, 이들 반에서 학생을 선발하기 위해서 국어, 수학, 영어 과목에 각각 가중치를 둔다고 하자.국어 | 수학 | 영어 | |
김 | 80 | 90 | 60 |
이 | 75 | 80 | 90 |
박 | 90 | 95 | 65 |
최 | 99 | 70 | 70 |
우수반 | 수학반 | |
국어 | 3 | 1 |
수학 | 3 | 8 |
영어 | 4 | 1 |
위와 같은 <표 A>와 <표 B>를 이용하여 김, 이, 박, 최 4명의 학생이 이들 각 반에 들어가려고 할 때의 가중치를 이용한 세 과목의 총점을 구하려고 한다. 이때 각 과목별로 (점수 × 가중치)의 총합을 계산하면 되는데, 여기서 행렬을 이용하면 편리하다.
[math(A=\begin{pmatrix}80 & 90 & 60 \\ 75 & 80 & 90 \\ 90 & 95 & 65 \\ 99 & 70 & 70\end{pmatrix}, B=\begin{pmatrix}3 & 1 \\ 3 & 8 \\ 4 & 1\end{pmatrix})]
일 때,[math(AB=\begin{pmatrix}80\cdot3+90\cdot3+60\cdot4 & 80\cdot1+90\cdot8+60\cdot1 \\ 75\cdot3+80\cdot3+90\cdot4 & 75\cdot1+80\cdot8+90\cdot1 \\ 90\cdot3+95\cdot3+65\cdot4 & 90\cdot1+95\cdot8+65\cdot1 \\ 99\cdot3+70\cdot3+70\cdot4 & 99\cdot1+70\cdot8+70\cdot1\end{pmatrix}=\begin{pmatrix}750 & 860 \\ 825 & 805 \\ 815 & 915 \\ 787 & 729\end{pmatrix})]
이다. 따라서 각 학생의 각 반별 가중치를 이용한 총점은 다음 표와 같다. 보다시피 앞 행렬의 행인 학생과 뒤 행렬의 열인 반이 대응되는 것을 볼 수 있다.우수반 | 수학반 | |
김 | 750 | 860 |
이 | 825 | 805 |
박 | 815 | 915 |
최 | 787 | 729 |
3.2. 연산 횟수
상기와 같이 정의된 두 행렬 [math(A, B)]의 곱 [math(AB)]를 계산하기 위한 연산 횟수는 다음과 같다.먼저 [math(AB)]의 각 성분은 [math(\sum_k a_{ik}b_{kj})] (단, [math(i=1,2,...,m, j=1,2,...,r, k=1,2,...,n)])로 정의되므로, 이를 계산하기 위해 덧셈과 곱셈은 각각 [math(n)]회 필요하다. 또한 [math(AB)]의 성분의 개수는 [math(mr)]이므로, 전체 행렬곱을 계산하는 데 덧셈과 곱셈은 각각 [math(mnr)]회 필요하다. 따라서 총 연산 횟수는 [math(2mnr)]이다.
세 행렬 [math(A, B, C)]의 크기가 각각 [math(a\times b, b\times c, c\times d)]일 때, 이들의 곱셈에 대한 결합법칙이 성립하므로 곱하는 순서에 따라 결과가 달라지지 않는다. 단 다음과 같이 곱하는 순서에 따라 연산 횟수가 달라진다.[4] [math(AB, BC)]가 각각 [math(a\times c, b\times d)] 크기의 행렬임에 유의한다. 덧셈과 곱셈의 연산 횟수가 같으므로 여기서는 덧셈의 연산 횟수를 기준으로 한다.
- [math((AB)C)] : [math(abc+acd=ac(b+d))]회
- [math(A(BC))] : [math(abd+bcd=bd(a+c))]회
이때 연산 횟수의 차이는 [math(\min(a, c))]가 [math(\min(b, d))]보다 훨씬 크거나 훨씬 작을 때 극명하게 벌어진다.
- [math(\min(a, c))]가 [math(\min(b, d))]보다 훨씬 클 때의 예시
- 예를 들어 [math(A, B, C)]의 크기가 각각 [math(80\times 90, 90\times 70, 70\times 2)], 즉 [math(a, b, c, d)]가 각각 [math(80, 90, 70, 2)]일 때 각 경우의 연산 횟수는 다음과 같으므로, 전자의 연산 시간이 훨씬 많이 소요될 것으로 예상할 수 있다.
- [math((AB)C)] : [math(80\times70\times(90+2)=515200)]회 (약 19.1배)
- [math(A(BC))] : [math(90\times2\times(80+70)=27000)]회
- [math(\min(a, c))]가 [math(\min(b, d))]보다 훨씬 작을 때의 예시
- 예를 들어 [math(A, B, C)]의 크기가 각각 [math(3\times 50, 50\times 5, 5\times 100)], 즉 [math(a, b, c, d)]가 각각 [math(3, 50, 5, 100)]일 때 각 경우의 연산 횟수는 다음과 같으므로, 후자의 연산 시간이 훨씬 많이 소요될 것으로 예상할 수 있다.
- [math((AB)C)] : [math(3\times5\times(50+100)=2250)]회
- [math(A(BC))] : [math(50\times100\times(3+5)=40000)]회 (약 17.8배)
- 위에 해당하지 않을 때는 비교적 작게 벌어진다.
- 예를 들어 [math(A, B, C)]의 크기가 각각 [math(5\times 6, 6\times 500, 500\times 7)], 즉 [math(a, b, c, d)]가 각각 [math(5, 6, 500, 7)]일 때 각 경우의 연산 횟수는 다음과 같다.
- [math((AB)C)] : [math(5\times500\times(6+7)=32500)]회 (약 1.53배)
- [math(A(BC))] : [math(6\times7\times(5+500)=21210)]회
네 행렬 [math(A, B, C, D)]의 크기가 각각 [math(a\times b, b\times c, c\times d, d\times e)]일 때 마찬가지로 연산 횟수를 계산하면 다음과 같다.
- [math(((AB)C)D)] : [math(abc+acd+ade=a(bc+cd+de))]회
- [math((A(BC))D)] : [math(bcd+abd+ade=d(ab+ae+bc))]회
- [math((AB)(CD))] : [math(abc+cde+ace=c(ab+ae+de))]회
- [math(A((BC)D))] : [math(bcd+bde+abe=b(ae+cd+de))]회
- [math(A(B(CD)))] : [math(cde+bce+abe=e(ab+bc+cd))]회
A가 n차 정사각행렬일 때, 거듭제곱 [math(A^k)]를 구하기 위한 덧셈 연산 횟수는 [math((k-1)n^3)]이며, 총 연산 횟수는 [math(2(k-1)n^3)]이다.
이와 관련된 알고리즘으로 연쇄 행렬 곱셈 알고리즘이 있다.
4. 특수한 행렬의 곱셈
두 행렬 [math(A, B)]에 대해서 그 곱 [math(AB)]가 정의될 때 다음이 성립한다.- [math(A)]가 정사각행렬일 때 [math(AB)]의 크기는 [math(B)]의 크기와 같다.
- 예를 들어 [math(A, B)]가 각각 [math(3\times 3, 3\times 1)] 행렬이면 [math(AB)]의 크기는 [math(3\times 1)]이다.
- [math(B)]가 정사각행렬일 때 [math(AB)]의 크기는 [math(A)]의 크기와 같다.
- 예를 들어 [math(A, B)]가 각각 [math(3\times 2, 2\times 2)] 행렬이면 [math(AB)]의 크기는 [math(3\times 2)]이다.
- 두 행렬 [math(A, B)]의 크기가 각각 [math(1\times n, n\times 1)]이면, 즉 [math(A, B)]가 각각 행벡터, 열벡터이면, [math(AB)]는 이들 벡터의 내적과 같다.
- 두 행렬 [math(A, B)]의 크기가 각각 [math(m\times 1, 1\times n)]이면, 즉 [math(A, B)]가 각각 열벡터, 행벡터이면, [math(AB)]의 각 성분은 [math(A, B)]의 대응되는 성분끼리의 곱과 같다. 즉, 다음과 같다. 앞의 경우와는 달리 [math(A)]의 열의 개수와 [math(B)]의 행의 개수가 1로 고정되어 있으므로 [math(m, n)]의 값이 서로 달라도 된다.
[math(AB=\begin{pmatrix}a_1b_1 & a_1b_2 & \cdots & a_1b_n \\ a_2b_1 & a_2b_2 & \cdots & a_2b_n \\ \vdots & \vdots & \ddots & \vdots \\ a_mb_1 & a_mb_2 & \cdots & a_mb_n\end{pmatrix})]
(단, [math(A=\begin{pmatrix}a_1 & a_2 & \cdots & a_m\end{pmatrix}^T, B=\begin{pmatrix}b_1 & b_2 & \cdots & b_n\end{pmatrix})])
5. 성질
행렬의 곱셈을 각 성분 관점에서 보면 곱셈과 덧셈이 아울러 이루어진다. 다르게 말하면 앞 행렬의 행벡터와 뒤 행렬의 열 벡터의 내적값을 스칼라로 가지는 새로운 행렬을 얻는 과정이 바로 행렬의 곱셈이다.즉, 행렬곱은 앞 행렬의 행과 뒤 행렬의 열이 대응되는 특성이 있기 때문에 일반적으로 교환법칙이 성립하지 않는다. 다만, 결합법칙은 성립한다.
5.1. 교환법칙
행렬곱에서 교환법칙은 대부분의 경우에 성립하지 않는다. 곱하려는 두 행렬이 행과 열의 개수가 같은 정사각행렬이 아니면 행렬의 크기 자체가 달라지며, 예를 들어 크기가 각각 [math(3\times 5, 5\times 3)]인 두 행렬을 곱할 때 순서에 따라 그 결과는 각각 [math(3\times 3, 5\times 5)] 크기의 행렬이 된다. 앞 행렬([math(A)])의 행의 수와 뒤 행렬([math(B)])의 열의 수가 다르면 [math(AB)]가 정의될 때 [math(BA)]가 정의조차 되지 않는다.예를 들어
[math(A=\begin{pmatrix}1 & 2 \\ 3 & 4\end{pmatrix}, B=\begin{pmatrix}5 & 6 \\ 7 & 8\end{pmatrix})]
일 때,[math(AB=\begin{pmatrix}19 & 22 \\ 43 & 50\end{pmatrix}, BA=\begin{pmatrix}23 & 34 \\ 31 & 46\end{pmatrix})]
이므로 [math(AB\ne BA)]이다.따라서 행렬에서는 실수의 계산에서 쓰이는 곱셈 공식을 일반적으로 적용할 수 없다. 즉 예를 들어 다음과 같다.
- [math((A+B)^2=A^2+AB+BA+B^2\ne A^2+2AB+B^2\ne A^2+2BA+B^2)]
- [math((A+B)(A-B)=A^2-AB+BA-B^2\ne A^2-B^2\ne A^2+AB-BA-B^2)]
5.1.1. 성립하는 경우
교환법칙이 성립하는 경우는 다음과 같다.- 곱하려는 행렬 중 하나가 단위행렬이거나 영행렬인 경우
- [math(IA=AI=A, OA=AO=O)]
- 곱하려는 행렬 중 하나가 [math(kI)] 꼴인 경우
- [math((kI)A=A(kI)=kA)]
따라서 이때는 다음과 같이 실수의 곱셈 공식을 그대로 사용할 수 있다.
- [math((A+I)^2=A^2+AI+IA+I^2=A^2+2A+I)]
- [math((A+I)(A-I)=A^2-AI+IA-I^2=A^2-A+A-I=A^2-I)]
또한 세 행렬 [math(A, B, C)]에 대해 서로 교환법칙이 성립할 때, 즉 [math(AB=BA, AC=CA, BC=CB)]일 때, [math(ABC=ACB=CAB=CBA=BCA=BAC)]이므로 곱하는 순서에 따라 곱셈 결과가 달라지지 않는다. 이는 4개 이상의 행렬이 서로 교환법칙이 성립할 때도 똑같이 적용된다.
그러나 [math(AB=BA, AC=CA)]라고 해서 무조건 [math(BC=CB)]라고 할 수는 없는데, [math(A=O, A=I)]와 같이 [math(A)]가 다른 행렬과의 교환법칙이 항상 성립하는 행렬인 경우 [math(B, C)]가 어떤 행렬인지와 무관하게 [math(AB=BA, AC=CA)]가 성립하기 때문이다.
두 행렬 [math(A, B)]에 대해 [math(AB=BA)]일 때, 이들의 역행렬 [math(A^{-1}, B^{-1})]이 존재한다고 하면 [math(A^{-1}B^{-1}=B^{-1}A^{-1})]가 성립한다. 즉 역행렬에 대해서도 마찬가지로 교환법칙이 성립한다. 이는 다음과 같이 증명할 수 있다.
- [math(A^{-1}B^{-1}=(BA)^{-1}=(AB)^{-1}=B^{-1}A^{-1})]
두 이차정사각행렬의 곱에 대해서 성립하기 위한 조건은 다음과 같다. 이 행렬을 각각
[math(A=\begin{pmatrix}a & b \\ c & d\end{pmatrix}, B=\begin{pmatrix}e & f \\ g & h\end{pmatrix})]
라고 할 때, [math(AB=\begin{pmatrix}ae+bg & af+bh \\ ce+dg & cf+dh\end{pmatrix}, BA=\begin{pmatrix}ae+cf & be+df \\ ag+ch & bg+dh\end{pmatrix})]이므로 교환법칙이 성립하려면
[math(ae+bg=ae+cf, af+bh=be+df, ce+dg=ag+ch, cf+dh=bg+dh)]
가 성립해야 한다.WolframAlpha에 따르면 이것을 만족시키는 해는 다음과 같다.
- [math(b\ne0, g=\displaystyle\frac{cf}{b}, h=\displaystyle\frac{-af+be+df}{b})]
- [math(b=0, c\ne0, f=0, h=\displaystyle\frac{-ag+ce+dg}{c})]
- [math(b=0, c=0, a-d\ne0, f=0, g=0)]
- 실수해: [math(b=0, c=0, d=a)]
5.2. 결합법칙
행렬곱에서 결합법칙이 성립한다는 것은 다음과 같이 증명할 수 있다.두 행렬 [math(A, B, C)]가 각각 [math(m\times n, n\times r, r\times s)] 행렬이고 [math(k=1,2,...,n, l=1,2,...,r)]일 때,
[math(A=\begin{pmatrix}a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn}\end{pmatrix}, B=\begin{pmatrix}b_{11} & b_{12} & \cdots & b_{1r} \\ b_{21} & b_{22} & \cdots & b_{2r} \\ \vdots & \vdots & \ddots & \vdots \\ b_{n1} & b_{n2} & \cdots & b_{nr}\end{pmatrix}, C=\begin{pmatrix}c_{11} & c_{12} & \cdots & c_{1s} \\ c_{21} & c_{22} & \cdots & c_{2s} \\ \vdots & \vdots & \ddots & \vdots \\ c_{r1} & c_{r2} & \cdots & c_{rs}\end{pmatrix})]
이라고 하면 행렬곱 [math((AB)C)]는[math((AB)C=\begin{pmatrix}\sum_k a_{1k}b_{k1} & \sum_k a_{1k}b_{k2} & \cdots & \sum_k a_{1k}b_{kr} \\ \sum_k a_{2k}b_{k1} & \sum_k a_{2k}b_{k2} & \cdots & \sum_k a_{2k}b_{kr} \\ \vdots & \vdots & \ddots & \vdots \\ \sum_k a_{mk}b_{k1} & \sum_k a_{mk}b_{k2} & \cdots & \sum_k a_{mk}b_{kr}\end{pmatrix}\begin{pmatrix}c_{11} & c_{12} & \cdots & c_{1s} \\ c_{21} & c_{22} & \cdots & c_{2s} \\ \vdots & \vdots & \ddots & \vdots \\ c_{r1} & c_{r2} & \cdots & c_{rs}\end{pmatrix}=\begin{pmatrix}\sum_l(\sum_k a_{1k}b_{kl})c_{l1} & \sum_l(\sum_k a_{1k}b_{kl})c_{l2} & \cdots & \sum_l(\sum_k a_{1k}b_{kl})c_{ls} \\ \sum_l(\sum_k a_{2k}b_{kl})c_{l1} & \sum_l(\sum_k a_{2k}b_{kl})c_{l2} & \cdots & \sum_l(\sum_k a_{2k}b_{kl})c_{ls} \\ \vdots & \vdots & \ddots & \vdots \\ \sum_l(\sum_k a_{mk}b_{kl})c_{l1} & \sum_l(\sum_k a_{mk}b_{kl})c_{l2} & \cdots & \sum_l(\sum_k a_{mk}b_{kl})c_{ls}\end{pmatrix})]
또한 행렬곱 [math(A(BC))]는[math(A(BC)=\begin{pmatrix}a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn}\end{pmatrix}\begin{pmatrix}\sum_l b_{1l}c_{l1} & \sum_l b_{1l}c_{l2} & \cdots & \sum_l b_{1l}c_{ls} \\ \sum_l b_{2l}c_{l1} & \sum_l b_{2l}c_{l2} & \cdots & \sum_l b_{2l}c_{ls} \\ \vdots & \vdots & \ddots & \vdots \\ \sum_l b_{nl}c_{l1} & \sum_l b_{nl}c_{l2} & \cdots & \sum_k b_{nl}c_{ls}\end{pmatrix}=\begin{pmatrix}\sum_k a_{1k}(\sum_l b_{kl}c_{l1}) & \sum_k a_{1k}(\sum_l b_{kl}c_{l2}) & \cdots & \sum_k a_{1k}(\sum_l b_{kl}c_{ls}) \\ \sum_k a_{2k}(\sum_l b_{kl}c_{l1}) & \sum_k a_{2k}(\sum_l b_{kl}c_{l2}) & \cdots & \sum_k a_{2k}(\sum_l b_{kl}c_{ls}) \\ \vdots & \vdots & \ddots & \vdots \\ \sum_k a_{mk}(\sum_l b_{kl}c_{l1}) & \sum_k a_{mk}(\sum_l b_{kl}c_{l2}) & \cdots & \sum_k a_{mk}(\sum_l b_{kl}c_{ls})\end{pmatrix})]
로 나타낼 수 있다.또는 행렬의 곱셈의 정의
[math((AB)_{ij}=\sum_k A_{ik}B_{kj})]
를 이용하여 다음과 같이 유도할 수도 있다.- [math(((AB)C)_{ij}=\sum_l (AB)_{il}c_{lj}=\sum_l(\sum_k a_{ik}b_{kl})c_{lj})]
- [math((A(BC))_{ij}=\sum_k a_{ik}(BC)_{kj}=\sum_k a_{ik}(\sum_l b_{kl}c_{lj}))]
이때 [math(\sum_l(\sum_k a_{ik}b_{kl})c_{lj})]와 [math(\sum_k a_{ik}(\sum_l b_{kl}c_{lj}))] (단, [math(i=1,2,...,m, j=1,2,...,s)])를 비교하면 다음과 같이 서로 같다는 것을 알 수 있다.
- [math(\sum_l(\sum_k a_{ik}b_{kl})c_{lj}=\sum_l \sum_k (a_{ik}b_{kl}c_{lj})=\sum_k \sum_l (a_{ik}b_{kl}c_{lj})=\sum_k a_{ik}(\sum_l b_{kl}c_{lj}))]
네 행렬 [math(A, B, C, D)]에 대하여 그 곱 [math(ABCD)]가 정의될 때, 다음과 같이 [math(((AB)C)D=(A(BC))D=(AB)(CD)=A((BC)D)=A(B(CD)))]가 성립한다.
[math(((AB)C)D=(A(BC))D)] [math(((AB)C)D=(ABC)D=AB(CD)=(AB)(CD))] [math((A(BC))D=A((BC)D)=A(B(CD)))] |
5.3. 분배법칙
행렬의 곱셈에서는 다음과 같은 분배법칙이 성립한다.- [math(A(B+C)=AB+AC)]
- [math((A+B)C=AC+BC)]
- [math((A(B+C))_{ij}=\sum_k A_{ik}(B+C)_{kj}=\sum_k A_{ik}(B_{kj}+C_{kj})=\sum_k A_{ik}B_{kj}+\sum_k A_{ik}C_{kj}=\sum_k(A_{ik}B_{kj}+A_{ik}C_{kj})=(AB+AC)_{ij})]
- [math(((A+B)C)_{ij}=\sum_k (A+B)_{ik}C_{kj}=\sum_k(A_{ik}+B_{ik})C_{kj}=\sum_k A_{ik}C_{kj}+\sum_k B_{ik}C_{kj}=\sum_k(A_{ik}C_{kj}+B_{ik}C_{kj})=(AC+BC)_{ij})]
5.4. 기타
- 임의의 실수 [math(k)]에 대하여 [math(k(AB)=(kA)B=A(kB))]가 성립한다.
- 행렬의 실수배 [math(kA)] ([math(k)]는 실수, [math(A)]는 행렬)는 행과 열의 개수가 각각 [math(A)]의 행의 개수와 같은 단위행렬 [math(I_r)]와 열의 개수와 같은 단위행렬 [math(I_c)]에 대해 행렬 [math(K_r=kI_r, K_c=kI_c)]를 이용하여 각각 [math(K_rA, AK_c)]로 나타낼 수 있다. 이 방법으로 행렬
[math(A=\begin{pmatrix}1 & 2 & 3 \\ 4 & 5 & 6\end{pmatrix})]
의 [math(k)]배인
[math(kA=\begin{pmatrix}k & 2k & 3k \\ 4k & 5k & 6k\end{pmatrix})]
를 나타내면 다음과 같다. - [math(I_r)]을 이용: [math(A)]의 행의 개수는 2개이므로,
[math(I_r=\begin{pmatrix}1 & 0 \\ 0 & 1\end{pmatrix}, K_r=\begin{pmatrix}k & 0 \\ 0 & k\end{pmatrix}, kA=K_rA=\begin{pmatrix}k & 0 \\ 0 & k\end{pmatrix}\begin{pmatrix}1 & 2 & 3 \\ 4 & 5 & 6\end{pmatrix}=\begin{pmatrix}k & 2k & 3k \\ 4k & 5k & 6k\end{pmatrix})] - [math(I_c)]을 이용: [math(A)]의 열의 개수는 3개이므로,
[math(I_c=\begin{pmatrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{pmatrix}, K_c=\begin{pmatrix}k & 0 & 0 \\ 0 & k & 0 \\ 0 & 0 & k\end{pmatrix}, kA=AK_c=\begin{pmatrix}1 & 2 & 3 \\ 4 & 5 & 6\end{pmatrix}\begin{pmatrix}k & 0 & 0 \\ 0 & k & 0 \\ 0 & 0 & k\end{pmatrix}=\begin{pmatrix}k & 2k & 3k \\ 4k & 5k & 6k\end{pmatrix})] - 연산 횟수를 비교할 때, 행의 개수가 더 적으면 [math(I_r)]을, 열의 개수가 더 적으면 [math(I_c)]을 이용하는 것이 연산 횟수가 더 적으므로 효율적이다.
- 정사각행렬의 경우에는 행과 열의 개수가 같으므로 [math(K_r, K_c)]를 앞과 뒤 어디든 추가해도 상관없다.
- 일차정사각행렬을 제외하고 [math(A\ne O, B\ne O)]이지만 [math(AB=O)]인 경우가 있다. 예를 들어 다음과 같다.
- [math(A=\begin{pmatrix}0 & 0 \\ 1 & 1\end{pmatrix}, B=\begin{pmatrix}1 & 0 \\ -1 & 0\end{pmatrix})] (이때 [math(AB=BA=O)])
- [math(A=\begin{pmatrix}1 & 1 \\ -1 & -1\end{pmatrix}, B=\begin{pmatrix}1 & 0 \\ -1 & 0\end{pmatrix})] (이때 [math(AB=O, BA=A)], 이 경우에는 [math(B)]가 단위행렬이 아닌데도 다른 행렬 [math(A)]와의 곱이 [math(A)]와 같다.)
- [math(A=\begin{pmatrix}1 & 2 & 3\end{pmatrix}, B=\begin{pmatrix}-1 \\ -1 \\ 1\end{pmatrix})]
6. 행렬의 거듭제곱과 행렬지수함수
임의의 행렬 [math(A)]를 여러 번 곱한 것을 행렬 [math(A)]의 거듭제곱이라고 한다. 행렬의 곱셈이 정의되는 원리에 의해 거듭제곱이 정의되려면 그 행렬은 행과 열의 개수가 같은 정사각행렬이어야 한다.행렬 [math(A)]에 대해 자기 자신을 [math(k)]번 곱한 것을 [math(A^k)]라고 표기한다.
예를 들어
[math(A=\begin{pmatrix}1 & 2 \\ 0 & 1\end{pmatrix})]
이면 다음과 같다.- [math(A^2=AA=\begin{pmatrix}1 & 2 \\ 0 & 1\end{pmatrix}\begin{pmatrix}1 & 2 \\ 0 & 1\end{pmatrix}=\begin{pmatrix}1 & 4 \\ 0 & 1\end{pmatrix})]
- [math(A^3=A^2A=\begin{pmatrix}1 & 4 \\ 0 & 1\end{pmatrix}\begin{pmatrix}1 & 2 \\ 0 & 1\end{pmatrix}=\begin{pmatrix}1 & 6 \\ 0 & 1\end{pmatrix})]
그러나 위 사례는 아래의 규칙성 문단 중 두 번째 규칙에 해당하기 때문에 거듭제곱의 일반항을 간단히 계산할 수 있으나, 일반적인 행렬은 행렬곱 자체의 연산만으로도 벅찬데 성분의 값 역시 기하급수적으로 늘어나게 되고, 심지어 지수가 매우 크면 일반항을 손으로 도저히 구할 수가 없게 된다. 그러므로 행렬이 대각화가 가능하다면, 이때는 고윳값과 고유벡터를 찾고, 열벡터로 고유벡터를 사용한 행렬(P)을 이용해 대각화를 한 다음(즉, [math(A = P^{-1} D P)], 단 D는 대각행렬) 역행렬의 성질을 이용해 행렬의 거듭제곱과 대각화된 식만을 남겨 놓으면 된다. 자세한 설명은 고유치 문제와 대각화 참고. 다만 대각화가 불가능한 행렬이 존재하기 때문에 조르당 분해 및 기타 여러 방법을 사용해야 한다.
한편 선형 연립 미분방정식의 해를 구하거나 리 대수(Lie algebra) 등의 영역에서는 행렬을 지수로 삼을 수 있다! 이것이 가능한 이유는 지수함수 [math(\exp(z))]의 테일러 급수 [math(\displaystyle \sum_{k=0}^{\infty} \frac{z^k}{k!})](엄밀히는 매클로린 급수)가 수렴하기 때문이며, 이 급수의 [math(z)]에 행렬 [math(A)]를 넣어도 수렴한다고 알려져 있다. [math(A^0 = I)](단, [math(I)]는 단위행렬)로 정의할 때, 선형 연립 미분방정식을 구할 때 행렬지수함수를 이용하는 것에 정당성을 부여할 수 있다. 3Blue1Brown의 행렬지수함수 영상.
6.1. 규칙성
특정한 형태의 행렬을 거듭제곱할 때 규칙성이 나타난다. 여기서는 다음을 모두 만족하는 경우에 한하여 소개한다.- 곱해지는 행렬의 모든 성분이 -1, 0, 1 또는 문자로 나타내어진 변수임
- 곱한 결과 행렬의 모든 성분(일반항)을 숫자 및 연산 기호를 포함하고 아래 첨자를 제외하여 10개 이하의 문자로 나타낼 수 있음
- [math(I^k=I, O^k=O)]
- [math(A=\begin{pmatrix}1 & a \\ 0 & 1\end{pmatrix})]일 때, [math(A^k=\begin{pmatrix}1 & ka \\ 0 & 1\end{pmatrix})]
- [math(A=\begin{pmatrix}1 & 0 \\ a & 1\end{pmatrix})]일 때, [math(A^k=\begin{pmatrix}1 & 0 \\ ka & 1\end{pmatrix})]
- [math(A=\begin{pmatrix}a & 0 \\ 1 & 1\end{pmatrix})]일 때, [math(A^k=\begin{pmatrix}a^k & 0 \\ \displaystyle\sum_{i=0}^{k-1}a^i & 1\end{pmatrix})]
- [math(A=\begin{pmatrix}1 & 1 \\ 0 & a\end{pmatrix})]일 때, [math(A^k=\begin{pmatrix}1 & \displaystyle\sum_{i=0}^{k-1}a^i \\ 0 & a^k\end{pmatrix})]
- [math(A=\begin{pmatrix}1 & 0 \\ a & b\end{pmatrix})]일 때, [math(A^k=\begin{pmatrix}1 & 0 \\ a\displaystyle\sum_{i=0}^{k-1}b^i & b^k\end{pmatrix})]
- [math(A=\begin{pmatrix}a & b \\ 0 & 1\end{pmatrix})]일 때, [math(A^k=\begin{pmatrix}a^k & b\displaystyle\sum_{i=0}^{k-1}a^i \\ 0 & 1\end{pmatrix})]
- [math(A=\begin{pmatrix}a_{11} & 0 & \cdots & 0 \\ 0 & a_{22} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & a_{nn}\end{pmatrix})]일 때, [math(A^k=\begin{pmatrix}a_{11}^k & 0 & \cdots & 0 \\ 0 & a_{22}^k & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & a_{nn}^k\end{pmatrix})]
이 행렬을 따로 대각행렬(diagonal matrix)이라고 하며 대각행렬의 이러한 성질은 앞서 언급한 고윳값, 고유벡터, 대각화와 매우 밀접한 관계를 갖고 있으니 필히 알고 있는 것이 좋다. - [math(A=\begin{pmatrix}1 & \cdots & 1 \\ \vdots & \ddots & \vdots \\ 1 & \cdots & 1\end{pmatrix})]일 때, 즉 모든 원소가 1일 때, [math(A^k=\begin{pmatrix}n^{k-1} & \cdots & n^{k-1} \\ \vdots & \ddots & \vdots \\ n^{k-1} & \cdots & n^{k-1}\end{pmatrix})] (단, [math(A)]는 [math(n\times n)] 행렬)
- [math(A=\begin{pmatrix}a & \cdots & a \\ \vdots & \ddots & \vdots \\ a & \cdots & a\end{pmatrix})]일 때, 즉 모든 원소가 [math(a)]일 때, [math(A^k=\begin{pmatrix}a^kn^{k-1} & \cdots & a^kn^{k-1} \\ \vdots & \ddots & \vdots \\ a^kn^{k-1} & \cdots & a^kn^{k-1}\end{pmatrix})] (단, [math(A)]는 [math(n\times n)] 행렬)
6.2. 제곱근행렬
자세한 내용은 제곱근행렬 문서 참고하십시오.7. 아다마르 곱(Hadamard product)
이것은 행렬곱과 다르게 같은 크기의 두 행렬의 각 성분을 곱하는 연산(element-wise multiplication)이다. 크기가 같은 두 행렬[math(A=\begin{bmatrix}
A_{11}&A_{12}&\dotsm&A_{1n}\\
A_{21}&A_{22}& \dotsm &A_{2n}\\
\vdots& \vdots &\ddots&\vdots\\
A_{m1}&A_{m2}&\dotsm&A_{mn}
\end{bmatrix} \qquad \qquad B=\begin{bmatrix}
B_{11}&B_{12}&\dotsm&B_{1n}\\
B_{21}&B_{22}& \dotsm &B_{2n}\\
\vdots& \vdots &\ddots&\vdots\\
B_{m1}&B_{m2}&\dotsm&B_{mn}
\end{bmatrix} )]
에 대하여 그 아다마르 곱은 다음과 같다.
[math(\displaystyle A \circ B=\begin{bmatrix}
A_{11}B_{11}&A_{12}B_{12}&\dotsm&A_{1n}B_{1n}\\
A_{21}B_{21}&A_{22}B_{22}& \dotsm &A_{2n}B_{2n}\\
\vdots& \vdots &\ddots&\vdots\\
A_{m1}B_{m1}&A_{m2}B_{m2}&\dotsm&A_{mn}B_{mn}
\end{bmatrix} )]
곱하는 두 행렬의 크기가 서로 같아야 하므로, 정의되기 위한 조건이 행렬의 덧셈이 정의되기 위한 조건과 동일하다.
아다마르 곱에서는 대응되는 각 성분을 단순히 곱한 결과를 성분으로 하므로, 실수의 곱셈에서와 같이 교환법칙과 결합법칙이 모두 성립한다. 교환법칙이 성립한다는 것이 일반적인 행렬곱과의 가장 큰 차이점이다.
8. 컴퓨터에서
- Microsoft Excel에서는 MMULT 함수를 이용하여 행렬곱을 구한다. 자세한 것은 Microsoft Excel/함수 목록 문서 참고.
- Python의 NumPy 라이브러리에서는 dot() 메소드를 이용하여 두 행렬의 곱을 구한다.
9. 활용
행렬곱은 사실상 행렬이 선형대수학적 의미로 쓰이는 모든 분야에서 쓰인다고 할 수 있다. 대표적으로 다음과 같다.- 인공신경망의 다층 퍼셉트론 (Multi Layer Perceptron, MLP)
- 네트워크 이론에서의 인접행렬(adjacency matrix)에서 길이가 [math(n>1)]인 걸음의 수 구하기
9.1. 선형변환의 행렬표현과 행렬곱
대칭변환, 회전변환과 같은 선형변환의 행렬표현에서 다음과 같은 의미를 갖는다.- 선형변환 [math(T_A, T_B)]의 행렬표현을 각각 [math(A, B)]라 하면, [math(AB)]는 어떤 도형에 [math(T_B)]를 적용하여 변환시킨 다음에 [math(T_A)]를 적용하여 또 한번 변환시키는 것을 의미한다. (합성변환)
- 특정 행렬표현의 n제곱은 해당 선형변환을 n번 반복한다는 것을 의미한다.
- 원점 대칭변환, 특정 직선에 대한 대칭변환, 3차원 이상의 좌표계에서 특정 평면, 입체 등에 대한 대칭변환 등 대부분의 대칭변환의 행렬표현의 제곱은 단위행렬 [math(I)]이다.
- 원점을 중심으로 [math(\theta)]만큼 회전시키는 회전변환 행렬의 [math(\displaystyle\frac{2n\pi}{\theta})] (단, [math(n=1,2,...)])제곱은 단위행렬이다.
[1] 한 행이 몇 개의 원소로 되어 있는지[2] 한 열이 몇 개의 원소로 되어 있는지[3] 예를 들어 직교행렬, 유니타리 행렬 등을 직교변환, 유니타리변환 등의 선형변환으로 쓰는 것도 문제 없이 가능하다.[4] 컴퓨터공학에서 이것이 중요한 의미를 갖는데, 행렬을 곱하는 알고리즘의 시간 복잡도가 계산 순서에 따라 크게 달라질 수 있기 때문이다.