행렬 곱셈
1. 개요
행렬 곱셈은 두 행렬을 곱하여 새로운 행렬을 생성하는 연산이다. m × n 행렬 A와 n × p 행렬 B의 곱 AB는 m × p 행렬로 정의되며, 결과 행렬의 각 성분은 A의 행과 B의 열의 스칼라곱으로 계산된다. 행렬 곱셈은 결합법칙이 성립하지만, 일반적으로 교환법칙은 성립하지 않는다. 행렬 곱셈은 선형 변환, 연립 일차 방정식, 생산 모델링 등 다양한 분야에 응용된다. 스칼라 곱, 아다마르 곱, 크로네커 곱 등 다른 유형의 행렬 곱셈도 존재한다. 행렬 곱셈의 계산 복잡도는 알고리즘에 따라 다르며, 슈트라센 알고리즘과 같은 효율적인 알고리즘이 개발되었다.
| 분야 | 선형대수학 |
|---|---|
| 정의 | 행렬의 곱셈은 첫 번째 행렬의 행과 두 번째 행렬의 열 간의 내적으로 정의된다. |
| 표기법 | AB |
| 행렬 곱셈 | 행렬 A와 행렬 B의 곱 AB |
|---|---|
| 조건 | A의 열의 수가 B의 행의 수와 같아야 함 |
| 결과 | 곱셈의 결과로 생성되는 행렬 |
| 크기 | A가 n × m 행렬이고 B가 m × p 행렬이면, AB는 n × p 행렬이 됨. |
| 계산 | 각 요소는 A의 해당 행과 B의 해당 열의 요소별 곱의 합으로 계산됨. |
|---|
| 결합 법칙 | (AB)C = A(BC) |
|---|---|
| 분배 법칙 | A((B + C) = AB + AC, (A + B)C = AC + BC' |
| 스칼라 곱셈 | (kA)B = A(kB) = k(AB) 여기서 k는 스칼라 |
| 항등 행렬 | AI = A = IA 여기서 I는 항등 행렬 |
| 전치 | (AB)T = BTAT |
| 복소수 켤레 | (AB)* = B*A* |
| 수반 행렬 | (AB)† = B†A† |
| 교환 법칙 | 일반적으로 AB ≠ BA (교환 법칙 성립 안 함) |
|---|---|
| 가역성 | A와 B가 정사각 행렬이고 가역적이면, (AB)-1 = B-1A-1 |
| 선형 변환 | 행렬 곱셈은 선형 변환의 합성을 나타냄 |
|---|---|
| 행렬식 | 정사각 행렬의 행렬식은 곱셈에 대해 곱셈적임: det(AB) = det(A)det(B) |
| 고윳값 및 고유 벡터 | 행렬의 고윳값과 고유 벡터는 행렬 곱셈과 관련됨 |
| 발명 | 자크 필리프 마리 비네가 1812년에 발명 |
|---|
-
이항연산 -
뺄셈
뺄셈은 두 수의 관계를 나타내는 연산으로, 덧셈의 역연산이며, 피감수에서 감수를 빼는 연산으로 차를 구하고, 반교환법칙과 결합 법칙은 성립하지 않으며, 다양한 계산 방법과 함께 여러 분야에서 활용된다. -
이항연산 -
나눗셈
나눗셈은 하나의 수를 다른 수로 나누어 몫과 나머지를 구하는 기본적인 산술 연산이다. -
수치선형대수학 -
가우스 소거법
가우스 소거법은 연립 일차 방정식의 해를 구하기 위해 행렬을 사다리꼴로 변환하는 알고리즘이며, 기본 행 연산을 통해 전진 소거와 후퇴 대입 단계를 거쳐 해를 계산하고, 행렬식 계산 등 다양한 분야에 응용된다. -
수치선형대수학 -
LINPACK
LINPACK은 부동소수점 연산 성능을 평가하는 벤치마크 프로그램이자 FORTRAN 라이브러리로, 슈퍼컴퓨터 성능 측정 기준으로 사용되는 HPLinpack 벤치마크의 기반이 되었으며, TOP500 목록에서 고성능 컴퓨터 순위를 결정하는 데 기여한다. -
곱셈 -
구구단
구구단은 곱셈을 간편하게 계산하도록 곱셈 결과를 표로 정리한 것이며, 1단부터 9단까지 외우는 곱셈 구구가 일반적이고, 덧셈, 뺄셈, 나눗셈 구구 등 다양한 형태가 존재하며, 수학적 개념 이해의 기초가 되고 실생활에도 응용된다. -
곱셈 -
네이피어의 뼈
네이피어의 뼈는 존 네이피어가 1617년에 발명한 계산 도구로, 곱셈을 덧셈으로 변환하여 계산을 간편하게 하고 나눗셈과 제곱근 계산에도 활용되며, 계산 기반과 막대 세트로 구성되어 막대에 표시된 숫자를 이용하여 복잡한 곱셈을 단순화한다.
2. 표기
행렬은 굵은 대문자(예: A)로, 벡터는 굵은 소문자(예: a)로, 행렬 및 벡터의 성분은 기울임체(예: *A*, *a*)로 표기한다. 첨자표기법에 따라 행렬 A의 *i*행 *j*열 성분은 (A)*ij*, *A**ij*, *a**ij* 등으로 표시한다. 반면 행렬 성분의 집합은 A1, A2 등으로 표시한다.
3. 정의
A영어, B영어를 각각 m × n, n × p 행렬이라고 하자.
:
행렬곱 는 m × p 행렬로 정의된다. 이때 곱셈 기호는 따로 쓰지 않는다.
:
이때 i = 1, ..., m, j = 1, ..., p에 대해 C의 성분은 다음과 같이 정의된다.
:
이는 A의 i번째 행과 B의 j번째 열의 성분들을 각각 곱해 더한 것과 같은데, 다시 말해 A의 i번째 행과 B의 j번째 열의 스칼라곱이다.
따라서 AB는 다음과 같이 쓸 수도 있다.
:
이러한 이유로 첫째 행렬의 열 갯수와 둘째 행렬의 행 갯수가 동일해야 행렬곱이 정의될 수 있다.
대부분의 경우 행렬의 성분은 숫자이지만, 덧셈과 곱셈이 정의되고, 곱셈의 결합법칙과 덧셈의 교환법칙이 성립하여 곱셈의 분배법칙이 성립하게 되는 다른 수학적 대상들도 성분이 될 수 있다. 가장 대표적인 예시로 성분이 행렬인 블록 행렬을 생각할 수 있다.
두 행렬 A와 B의 곱을 도표로 나타낸 것으로, 곱 행렬의 각 교집합이 A의 행과 B의 열에 어떻게 해당하는지 보여준다.
오른쪽 그림에서 원으로 표시된 교차점의 값은 다음과 같다.
길이가 n인 벡터 x는 n × 1 행렬 X에 해당하는 열 벡터로 볼 수 있으며, 여기서 항목은 Xi1 = xi로 주어진다. A가 m × n 행렬인 경우, Ax로 표시되는 행렬-벡터 곱은 열 벡터로 간주될 때 m × 1 행렬 AX와 동일한 벡터 y이다. 인덱스 표기법으로 나타내면 다음과 같다.
:
마찬가지로, 길이가 n인 벡터 x는 1 × n 행렬에 해당하는 행 벡터로 볼 수 있다. 행 벡터임을 명확히 하기 위해, 이 맥락에서는 열 벡터의 전치 행렬로 표현하는 것이 일반적이다. 따라서 xTA와 같은 표기를 볼 수 있다. 등식 xTA = (ATx)T가 성립한다. 지표 표기법에서, A가 n × p 행렬이고, xTA = yT인 경우 다음과 같다.
:
두 벡터 a와 b의 내적 a ⋅ b는 길이가 같을 때, 이 벡터들을 행 벡터와 열 벡터로 곱하여 얻는 1 × 1 행렬의 단일 요소와 같다. 즉, aTb (또는 bTa는 동일한 1 × 1 행렬을 생성한다).
행렬 A의 i행과 행렬 B의 j열의 각 성분의 곱을 실선 부분처럼 취하고, 이어서 점선처럼 더해감으로써, 곱 AB의 ij 성분을 얻는다.
n × m 행렬 A와 m × p 행렬 B를
:
라고 할 때, 이들의 행렬의 곱 AB (통상 곱셈 기호는 특별히 사용하지 않고 병치로 나타낸다)는 각 (i, j) 성분 cij가 A의 i행에 가로로 늘어선 성분 aik와 B의 j열에 세로로 늘어선 성분 bkj를 k = 1, 2, ..., m에 걸쳐 더한 합
:
로 주어지는 n × p 행렬
:
이다. 따라서 곱 AB가 정의되는 것은 A의 열의 개수와 B의 행의 개수가 일치하는 경우에 한정된다 (이 경우에는 m개).
4. 성질
행렬 곱셈은 일반적인 곱셈과 비슷한 성질을 가지지만, 몇 가지 중요한 차이점이 있다.
* 결합법칙: 세 행렬 A, B, C에 대해, 곱셈의 순서와 상관없이 결과는 같다. 즉, (AB)C = A(BC)이다.
* 분배법칙: 행렬 덧셈에 대해 분배법칙이 성립한다. 즉, A(B + C) = AB + AC 이고, (B + C)D = BD + CD 이다.
* 스칼라 곱: 스칼라 *c*와 행렬 A, B의 곱에 대해, *c*(AB) = (*c*A)B = A(*c*B)가 성립한다.
* 전치: 두 행렬의 곱의 전치는 각 행렬의 전치를 순서를 바꾸어 곱한 것과 같다. 즉, (AB)T = BTAT이다.
* 복소 켤레: 복소수 행렬의 경우, (AB)* = A*B*이다. (단, *는 켤레 복소수를 나타냄)
* 비가환성: 일반적으로 행렬 곱셈은 교환법칙이 성립하지 않는다. 즉, AB ≠ BA이다. 하지만, *A* + *B* = *AB* 와 같은 특수한 경우에는 교환법칙이 성립할 수 있다.
정사각 행렬의 경우, 행렬 곱셈은 항등 행렬을 항등원으로 갖는 환을 이룬다.
4.1. 정사각 행렬
환의 원소를 갖는 n×n 정사각 행렬의 집합은 곱셈이 모든 행렬 쌍에 대해 정의되므로 항등 행렬(대각선 성분은 1이고 다른 모든 성분은 0인 행렬)을 항등원으로 갖는 환을 이룬다.
만약 n > 1이면, 많은 행렬은 곱셈 역원을 갖지 않는다. 예를 들어, 행(또는 열)의 모든 성분이 0인 행렬은 역행렬을 갖지 않는다. 역행렬이 존재하면, 행렬 A의 역행렬은 A−1로 표시되며, AA−1 = A−1A = I를 만족한다. 역행렬을 갖는 행렬은 가역 행렬이고, 그렇지 않으면 특이 행렬이다. 행렬의 곱은 각 인수가 가역 행렬일 경우에만 가역 행렬이며, (AB)-1 = B-1A-1이다.
가환환에서 곱의 행렬식은 행렬식들의 곱과 같다. 행렬식은 스칼라이고, 스칼라는 교환 가능하므로, det(AB) = det(BA) = det(A)det(B)이다.
정사각 행렬은 자기 자신을 반복해서 곱하여 음이 아닌 정수 거듭제곱으로 올릴 수 있다. 즉:
:A0 = I
:A1 = A
:Ak = AAA (k 번 곱함)
행렬의 k번째 거듭제곱을 계산하는 데에는 단순한 알고리즘(반복 곱셈)을 사용하면 단일 행렬 곱셈 시간의 k – 1배가 필요하다. 이는 매우 시간이 오래 걸릴 수 있으므로 일반적으로 제곱에 의한 거듭제곱을 사용하는 것이 좋다. 이 방법은 2 log2 k보다 적은 행렬 곱셈이 필요하므로 훨씬 더 효율적이다.
대각 행렬의 경우, 대각 행렬의 k번째 거듭제곱은 항목들을 k 거듭제곱으로 올려 얻는다.
:
5. 응용
행렬 곱셈은 선형 변환을 표현하고 합성하는 데 사용된다. 예를 들어, 유클리드 평면에서 회전 변환은 행렬 곱셈으로 표현할 수 있다.
유클리드 평면에서 직교 좌표계를 사용할 때, 원점을 중심으로 각도 만큼 회전하는 선형 변환은 다음과 같이 표현된다.
:
여기서 원본 점 와 그 이미지 는 열 벡터로 표기된다.
각도 만큼의 회전과 각도 만큼의 회전을 합성한 결과는 다음 행렬 곱셈으로 나타낼 수 있다.
:
이는 각도 만큼의 회전에 해당한다.
연립 일차 방정식은 다음과 같은 행렬 방정식 형태로 나타낼 수 있다.
:
여기서,
* A는 계수 행렬
* x는 미지수 벡터
* b는 상수 벡터
선형 사상 A는 행렬
:
로 정의되며 열 벡터 를 행렬 곱
:
에 사상한다.
행렬 곱셈은 경제학에서 자원 할당 문제 등 경제학적 모델링에도 활용된다. 예를 들어, 여러 종류의 기본 상품을 사용하여 중간재를 생산하고, 이 중간재를 다시 사용하여 최종 제품을 생산하는 과정을 행렬 곱셈으로 나타낼 수 있다.
가상의 공장에서 4가지 종류의 기본 상품 를 사용하여 3가지 종류의 중간재 을 생산하고, 이 중간재는 다시 3가지 종류의 최종 제품 을 생산하는 경우를 가정할 수 있다. 행렬
: 와
는 주어진 양의 중간재에 필요한 기본 상품의 양과, 주어진 양의 최종 제품에 필요한 중간재의 양을 각각 제공한다.
행렬 곱셈을 사용하여 다음을 계산한다.
:
이 행렬은 주어진 양의 최종 상품에 필요한 기본 상품의 양을 직접 제공한다.
이 외에도 행렬 곱셈은 물리학, 화학, 공학, 컴퓨터 과학 등 다양한 분야에서 활용된다.
6. 기타 곱셈
만약 가 행렬이고 가 스칼라라면, 행렬 와 는 의 모든 성분에 를 왼쪽 또는 오른쪽에서 곱하여 얻어진다. 스칼라가 교환 법칙을 만족한다면, 이다.
만약 곱 가 정의된다면 (즉, 의 열의 개수가 의 행의 개수와 같다면), 다음이 성립한다.
: 그리고
만약 스칼라가 교환 법칙을 만족한다면, 네 행렬은 모두 같다.
이러한 성질은 스칼라 곱의 쌍선형성에서 비롯된다.
:
:
행렬의 다른 유형의 곱셈은 다음과 같다.
* 프로베니우스 내적: 벡터로 간주되는 행렬의 내적, 또는 동일하게는 아다마르 곱의 성분의 합
* 아다마르 곱: 동일한 크기의 두 행렬의 곱으로, 동일한 크기의 행렬이 생성되며, 이는 항목별 곱이다.
* 크로네커 곱 또는 텐서 곱: 크기에 제한 없이 정의되는 곱셈이다.
* 카트리-라오 곱 및 페이스 분할 곱
* 외적: 두 열 행렬의 쌍대곱 또는 텐서 곱이라고도 하며, 이다.
* 스칼라 곱Scalar multiplication영어: 행렬에 부수되는 가장 단순한 형태의 곱셈으로 크로네커 곱의 특별한 경우이다.
행렬 의 스칼라 에 의한 왼쪽 스칼라 곱(left scalar multiplicationen-short)은,
:
로 주어지는 와 같은 크기의 행렬 가 된다. 즉,
:
마찬가지로, 행렬 의 스칼라 에 의한 오른쪽 스칼라 곱(right scalar multiplicationen-short)은
:
로 정의된다.
기초가 되는 환이 (예를 들어 실수 또는 복소수체와 같은) 가환환이라면, 왼쪽 및 오른쪽 스칼라 곱의 개념은 일치하여 단순히 스칼라 곱이라고 불린다.
같은 크기의 두 행렬에 대해, 아다마르 곱(Hadamard producten-short), 원소별 곱(element-wise producten-short), 점별 곱(pointwise producten-short), 성분별 곱(entrywise producten-short) 또는 슈어 곱(Schur producten-short)이라고 불리는 곱을 정의할 수 있다。같은 크기의 두 행렬 , 의 아다마르 곱 는 원래와 같은 크기의 행렬로, 그 -성분은 의 -성분과 의 -성분의 곱으로 주어진다. 즉,
:
전부 쓰면,
:
이 연산은 통상적인 수의 곱을 일제히 행하는 것에 불과하다. 따라서 아다마르 곱은 교환적이며, 결합적이며, 성분별 합에 대해 분배 법칙이 성립한다. 이것은 또한 크로네커 곱의 주 소행렬이기도 하다.
프로베니우스 내적(Frobenius inner producten-short)은 행렬을 단순히 벡터로 간주하여 성분별로 계산한 내적으로, 등으로 표기하기도 한다. 이는 아다마르 곱의 성분 합과 같으며, 구체적으로는
:
와 같다. 단, ""는 행렬의 대각합이며, ""는 행렬 일렬화이다. 이 내적으로부터 프로베니우스 노름이 유도된다.
두 행렬 , 의 크기가 각각 , 일 때, 이들이 어떤 크기이든 (크기에 관한 제약 조건 없이) 이 두 행렬의 크로네커 곱(Kronecker producten-short)은
:
로 주어지는 크기 의 행렬이다。이는 더 일반적인 텐서 곱을 행렬에 적용한 것이다.
7. 계산 복잡도
일반적인 행렬 곱셈 알고리즘은 두 개의 정사각 행렬의 곱을 계산하기 위해 $n^3$번의 곱셈과 $(n-1)n^2$번의 스칼라 덧셈을 필요로 한다. 따라서 해당 알고리즘의 계산 복잡도는 스칼라 연산이 상수 시간 안에 완료되는 계산 모델에서 $O(n^3)$이다.
1969년 볼커 슈트라센이 제시한 슈트라센 알고리즘은 이보다 더 빠른 $O( n^{\log_{2}7}) \approx O(n^{2.8074})$의 복잡도를 가진다. 슈트라센 알고리즘은 성능을 더욱 향상시키기 위해 병렬화될 수 있다. 현재 검증된 최고의 행렬 곱셈 알고리즘은 버지니아 바실레브스카 윌리엄스, 옌잔 쉬, 지쉬안 쉬, 렌페이 저우가 개발한 알고리즘으로, 복잡도는 $O(n^{2.371552})$이다.
행렬 곱셈의 계산 복잡도는 수치 선형대수와 이론 컴퓨터 과학에서 중요한 연구 주제이다. 행렬 곱셈은 많은 알고리즘의 기초를 형성하며, 행렬에 대한 많은 연산이 행렬 곱셈과 동일한 복잡도를 가지기 때문이다.