行列の乗法

数学において、行列の対から別の行列を作り出す二項演算としての行列の乗法（ぎょうれつのじょうほう）は、実数や複素数などの数が初等的な四則演算でいうところの乗法を持つことと対照的に、そのような「数の配列」の間の乗法として必ずしも一意的な演算を指しうるものではない。そのような意味では、一般に「行列の乗法」は幾つかの異なる二項演算を総称するものと考えることができる。行列の乗法の持つ重要な特徴には、与えられた行列の行および列の数（行列の型やサイズあるいは次元と呼ばれるもの）が関係して、得られる行列の成分がどのように特定されるかが述べられるということが挙げられる。 例えば、ベクトルの場合と同様に、任意の行列に対してスカラーを掛けるという操作が、その行列の全ての成分に同じ数を掛けるという方法で与えられる。また、加法や減法（英語版）の場合と同様に、同じサイズの行列に対して成分ごとの乗法を入れることによって定まる行列の積はアダマール積と呼ばれる。それ以外にも、二つの行列のクロネッカー積は区分行列として得られる。 このようにさまざまな乗法が定義できるという事情の中にあっても、しかし最も重要な行列の乗法は連立一次方程式やベクトルの一次変換に関するもので、応用数学や工学へも広く応用がある。これは通例、行列の積（ぎょうれつのせき、英: matrix product）と呼ばれるもので、A が n × m 行列で、B が m × p 行列ならば、それらの行列の積 AB が n × p 行列として与えられ、その成分は A の各行の m 個の成分がそれぞれ順番に B の各列の m 個の成分と掛け合わされる形で与えられる（後述）。 この通常の積は可換ではないが、結合的かつ行列の加法に対して分配的である。この行列の積に関する単位元（数において 1 を掛けることに相当するもの）は単位行列であり、正方行列は逆行列（数における逆数に相当）を持ち得る。行列の積に関して行列式は乗法的である。一次変換や行列群あるいは群の表現などの理論を考える上において行列の積は重要な演算となる。 行列のサイズが大きくなれば、二つあるいはそれ以上の行列の積の計算を定義に従って行うには、非常に膨大な時間が掛かるようになってしまうため、効果的に行列の積を計算できるアルゴリズムが考えられてきた。 行列に付随するもっとも単純な形の乗法としてスカラー乗法が挙げられる（これはクロネッカー積の特別の場合になっている）。 行列 A のスカラー λ による左スカラー倍（英: left scalar multiplication）は、 λ A = ( λ a i j ) {\displaystyle \lambda A=(\lambda a_{ij})} で与えられる A と同じサイズの行列 λA となる。つまり、 λ A = λ [ a 11 a 12 ⋯ a 1 m a 21 a 22 ⋯ a 2 m ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n m ] = [ λ a 11 λ a 12 ⋯ λ a 1 m λ a 21 λ a 22 ⋯ λ a 2 m ⋮ ⋮ ⋱ ⋮ λ a n 1 λ a n 2 ⋯ λ a n m ]   {\displaystyle \lambda A=\lambda {\begin{bmatrix}a_{11}&a_{12}&\cdots &a_{1m}\\a_{21}&a_{22}&\cdots &a_{2m}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &a_{nm}\end{bmatrix}}={\begin{bmatrix}\lambda a_{11}&\lambda a_{12}&\cdots &\lambda a_{1m}\\\lambda a_{21}&\lambda a_{22}&\cdots &\lambda a_{2m}\\\vdots &\vdots &\ddots &\vdots \\\lambda a_{n1}&\lambda a_{n2}&\cdots &\lambda a_{nm}\end{bmatrix}}\ } 同様に、行列 A のスカラー λ による右スカラー倍（英: right scalar multiplication）は A λ = [ a 11 a 12 ⋯ a 1 m a 21 a 22 ⋯ a 2 m ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n m ] λ = [ a 11 λ a 12 λ ⋯ a 1 m λ a 21 λ a 22 λ ⋯ a 2 m λ ⋮ ⋮ ⋱ ⋮ a n 1 λ a n 2 λ ⋯ a n m λ ] {\displaystyle A\lambda ={\begin{bmatrix}a_{11}&a_{12}&\cdots &a_{1m}\\a_{21}&a_{22}&\cdots &a_{2m}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &a_{nm}\end{bmatrix}}\lambda ={\begin{bmatrix}a_{11}\lambda &a_{12}\lambda &\cdots &a_{1m}\lambda \\a_{21}\lambda &a_{22}\lambda &\cdots &a_{2m}\lambda \\\vdots &\vdots &\ddots &\vdots \\a_{n1}\lambda &a_{n2}\lambda &\cdots &a_{nm}\lambda \end{bmatrix}}} で定義される。 基礎とする環が（例えば実または複素数体のような）可換環ならば、左及び右スカラー倍の概念は一致して、単にスカラー倍と呼ばれる。より一般の環では（四元数体のように）非可換であるから左右が異なれば異なる乗法である。 まずは二つの行列を掛け合わせることを考える（任意個数への一般化は後述）。 n × m 行列 A と m × p 行列 B を A = [ a 11 a 12 ⋯ a 1 m a 21 a 22 ⋯ a 2 m ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n m ] , B = [ b 11 b 12 ⋯ b 1 p b 21 b 22 ⋯ b 2 p ⋮ ⋮ ⋱ ⋮ b m 1 b m 2 ⋯ b m p ] {\displaystyle A={\begin{bmatrix}a_{11}&a_{12}&\cdots &a_{1m}\\a_{21}&a_{22}&\cdots &a_{2m}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &a_{nm}\end{bmatrix}},\quad B={\begin{bmatrix}b_{11}&b_{12}&\cdots &b_{1p}\\b_{21}&b_{22}&\cdots &b_{2p}\\\vdots &\vdots &\ddots &\vdots \\b_{m1}&b_{m2}&\cdots &b_{mp}\end{bmatrix}}} とするとき、これらの行列の積 AB（通例、乗法記号は特に用いずに併置で表す）は、 各 (i, j) 成分 cij が A の第 i 行に横に並ぶ成分 aik と B の第 j 列に縦に並ぶ成分 bkj を k = 1, 2, ..., m に亙って足し合わせた和 c i j = ∑ k = 1 m a i k b k j {\displaystyle c_{ij}=\sum _{k=1}^{m}a_{ik}b_{kj}} で与えられる n × p 行列 A B = [ c 11 c 12 ⋯ c 1 p c 21 c 22 ⋯ c 2 p ⋮ ⋮ ⋱ ⋮ c n 1 c n 2 ⋯ c n p ] {\displaystyle AB={\begin{bmatrix}c_{11}&c_{12}&\cdots &c_{1p}\\c_{21}&c_{22}&\cdots &c_{2p}\\\vdots &\vdots &\ddots &\vdots \\c_{n1}&c_{n2}&\cdots &c_{np}\end{bmatrix}}} である。従って、積 AB が定義されるのは A の列の本数と B の行の本数が一致している場合に限られる（今の場合は m 本）。 二つ以上の個数の行列に対しても、それらの連続する各対に関してサイズの条件が満たされるならば、行列の積を定義することができる。 n-個の行列 A1, A2, ..., An がそれぞれサイズ s0 × s1, s1 × s2, ..., sn − 1 × sn であるとき（ここで s0, s1, s2, ..., sn は何れも単に正整数であって、これらの下付き添数はそれぞれどの行列に対応するのかを示す以上の意味は無い）、これら行列の積 ∏ i = 1 n A i = A 1 A 2 ⋯ A n = ( a i j ( 1 ) ) ( a i j ( 2 ) ) ⋯ ( a i j ( n ) ) {\displaystyle \prod _{i=1}^{n}A_{i}=A_{1}A_{2}\cdots A_{n}=(a_{ij}^{(1)})(a_{ij}^{(2)})\cdots (a_{ij}^{(n)})} は s0 × sn 行列であり、その任意の (i0, in)-成分は ∑ i 1 = 1 s 1 ∑ i 2 = 1 s 2 ⋯ ∑ i n − 1 = 1 s n − 1 a i 0 , i 1 ( 1 ) a i 1 , i 2 ( 2 ) ⋯ a i n − 1 , i n ( n ) {\displaystyle \sum _{i_{1}=1}^{s_{1}}\sum _{i_{2}=1}^{s_{2}}\cdots \sum _{i_{n-1}=1}^{s_{n-1}}a_{i_{0},i_{1}}^{(1)}a_{i_{1},i_{2}}^{(2)}\cdots a_{i_{n-1},i_{n}}^{(n)}} で与えられる。 正方行列に関しては、行の本数と列の本数が常に等しいから、通常の数と同様に自分自身を繰り返し掛けることができて、この行列の積の特別の場合としての反復乗積は行列の冪（英: matrix power）を定義することができる。行の本数と列の本数が一致しない一般の矩形行列では冪を考えることができない。即ち、n × n 行列 A と正整数 k に対して A k = A A ⋯ A k  times {\displaystyle A^{k}={\underset {k{\text{ times}}}{AA\cdots A}}} 冪の逆として行列の冪根を考えたり、また冪級数として行列の指数函数やその逆写像として行列の対数函数などを定義したりすることもできる。 二つの行列に対して定義されるその他の乗法を以下にいくつか挙げる。実は通常の乗法よりも定義としては単純なものもいくつかある。 同じサイズの二つの行列に対し、アダマール積（英: Hadamard product）、要素ごとの積（英: element-wise product）、点ごとの積（英: pointwise product）、成分ごとの積（英: entrywise product）あるいはシューア積（英: Schur product）などと呼ばれる積を定義することができる。同じサイズの二つの行列 A, B のアダマール積 A ○ B はもとと同じサイズの行列で、その (i, j)-成分は A の (i, j)-成分と B の (i, j)-成分との積で与えられる。つまり、 A ∘ B = ( a i j b i j ) {\displaystyle A\circ B=(a_{ij}b_{ij})} 全部書けば、 [ a 11 a 12 ⋯ a 1 m a 21 a 22 ⋯ a 2 m ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n m ] ∘ [ b 11 b 12 ⋯ b 1 m b 21 b 22 ⋯ b 2 m ⋮ ⋮ ⋱ ⋮ b n 1 b n 2 ⋯ b n m ] = [ a 11 b 11 a 12 b 12 ⋯ a 1 m b 1 m a 21 b 21 a 22 b 22 ⋯ a 2 m b 2 m ⋮ ⋮ ⋱ ⋮ a n 1 b n 1 a n 2 b n 2 ⋯ a n m b n m ]   {\displaystyle {\begin{bmatrix}a_{11}&a_{12}&\cdots &a_{1m}\\a_{21}&a_{22}&\cdots &a_{2m}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &a_{nm}\end{bmatrix}}\circ {\begin{bmatrix}b_{11}&b_{12}&\cdots &b_{1m}\\b_{21}&b_{22}&\cdots &b_{2m}\\\vdots &\vdots &\ddots &\vdots \\b_{n1}&b_{n2}&\cdots &b_{nm}\end{bmatrix}}={\begin{bmatrix}a_{11}b_{11}&a_{12}b_{12}&\cdots &a_{1m}b_{1m}\\a_{21}b_{21}&a_{22}b_{22}&\cdots &a_{2m}b_{2m}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}b_{n1}&a_{n2}b_{n2}&\cdots &a_{nm}b_{nm}\end{bmatrix}}\ } この演算は（mn 個ある各成分において）通常の数の積を一斉に行うことに他ならない。故にアダマール積は可換、結合的、かつ成分ごとの和に対して分配的になる。これはまた、クロネッカー積の主小行列でもある。 フロベニウス（内）積（英: Frobenius inner product）は行列を単にベクトルと見做してとった成分ごとの内積で、A : B などと書かれることもある。これはアダマール積の成分の和でもあり、具体的に書けば A : B = ∑ i , j a i j b i j = vec ⁡ ( t A ) vec ⁡ ( B ) = tr ⁡ ( t A B ) = tr ⁡ ( A t B ) {\displaystyle A:B=\sum _{i,j}a_{ij}b_{ij}=\operatorname {vec} ({}^{t}\!A)\operatorname {vec} (B)=\operatorname {tr} ({}^{t}\!AB)=\operatorname {tr} (A\,{}^{t}\!B)} となる。ただし "tr" は行列の蹟であり、"vec" は行列の一列化である。この内積からフロベニウスノルムが誘導される。 二つの行列 A, B のサイズがそれぞれ m × n, p × q であるとき、これらがどのようなサイズであったとしても（サイズに関する制約条件なしに）、この二つの行列のクロネッカー積（英: Kronecker product）は A ⊗ B = [ a 11 B a 12 B ⋯ a 1 n B a 21 B a 22 B ⋯ a 2 n B ⋮ ⋮ ⋱ ⋮ a m 1 B a m 2 B ⋯ a m n B ] {\displaystyle A\otimes B={\begin{bmatrix}a_{11}B&a_{12}B&\cdots &a_{1n}B\\a_{21}B&a_{22}B&\cdots &a_{2n}B\\\vdots &\vdots &\ddots &\vdots \\a_{m1}B&a_{m2}B&\cdots &a_{mn}B\end{bmatrix}}} で与えられるサイズ mp × nq の行列である。これはより一般のテンソル積を行列に対して適用したものになっている。