최근 수정 시각 : 2024-11-03 19:36:47

행렬곱

선형대수학
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. 개요2. 부자연스럽게 정의되는 이유3. 계산 방법
3.1. 예시3.2. 연산 횟수
4. 특수한 행렬의 곱셈5. 성질
5.1. 교환법칙
5.1.1. 성립하는 경우
5.2. 결합법칙5.3. 분배법칙5.4. 기타
6. 행렬의 거듭제곱과 행렬지수함수7. 아다마르 곱(Hadamard product)8. 컴퓨터에서9. 활용

1. 개요

Matrix Multiplication

행렬의 곱셈은 여타 행렬의 연산과 같이 '크기가 맞는' 경우에만 정의되는데, 행렬의 곱셈에서 '크기가 맞는다'는 것은 앞 행렬의 열의 수[1]와 뒷 행렬의 행의 수[2]가 같다는 것이다. 아래 곱셈의 정의를 보면 명확할 것이다.

곱셈 결과 나오는 행렬의 크기는

( 행렬의 의 수) [math(\times)] ( 행렬의 의 수)

가 된다. 즉, 앞 행렬의 크기가 [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(AB)]의 각 성분 [math((AB)_{ij})]에 대해 그 성분이 있는 자리의 왼쪽에 있는 [math(A)]의 [math(i)]행과 위쪽에 있는 [math(B)]의 [math(j)]열을 찾는다. 그 행과 열의 대응되는 성분끼리의 곱의 합이 바로 그 성분의 값이 된다. 예를 들어
[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((AB)_{12})]에 해당하는 값인 22는 [math(A)]의 1행과 [math(B)]의 2열의 대응되는 성분끼리의 곱의 합에 해당한다. 즉 다음과 같다.
  • [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
<표 A: 각 학생의 과목별 성적>
우수반 수학반
국어 3 1
수학 3 8
영어 4 1
<표 B: 각 반의 과목별 가중치>

위와 같은 <표 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(A(BC))]의 순서로 곱하는 것이 더 빠르려면 [math(bd(a+c)<ac(b+d))]이어야 한다.

이때 연산 횟수의 차이는 [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})]
마찬가지로 3개 이상의 행렬에 대해서 서로 교환법칙이 성립할 때 이들의 역행렬에 대해서도 역시 교환법칙이 성립하므로, 곱셈 순서에 따라 그 결과가 달라지지 않는다.

두 이차정사각행렬의 곱에 대해서 성립하기 위한 조건은 다음과 같다. 이 행렬을 각각
[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((AB)C, A(BC))]의 모든 성분에 대해 성립하므로, [math((AB)C=A(BC))], 즉 결합법칙이 성립한다.

네 행렬 [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. 제곱근행렬

파일:상세 내용 아이콘.svg   자세한 내용은 제곱근행렬 문서
번 문단을
부분을
참고하십시오.

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. 컴퓨터에서

9. 활용

행렬곱은 사실상 행렬이 선형대수학적 의미로 쓰이는 모든 분야에서 쓰인다고 할 수 있다. 대표적으로 다음과 같다.

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,...)])제곱은 단위행렬이다.


파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 문서의 r83에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r83 ( 이전 역사)
문서의 r83 ( 이전 역사)


[1] 한 행이 몇 개의 원소로 되어 있는지 [2] 한 열이 몇 개의 원소로 되어 있는지 [3] 예를 들어 직교행렬, 유니타리 행렬 등을 직교변환, 유니타리변환 등의 선형변환으로 쓰는 것도 문제 없이 가능하다. [4] 컴퓨터공학에서 이것이 중요한 의미를 갖는데, 행렬을 곱하는 알고리즘 시간 복잡도가 계산 순서에 따라 크게 달라질 수 있기 때문이다.