\[\begin{split}
A =
\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22}
\end{pmatrix}
\end{split}\]
\[
% 太字のalias
\newcommand{\b}[1]{\boldsymbol{#1}}
%
\DeclareMathOperator{\Ker}{\text{Ker}}
\DeclareMathOperator{\Im}{\text{Im}}
\DeclareMathOperator{\dim}{\text{dim}}
\DeclareMathOperator{\rank}{\text{rank}}
%
\]
行列積
\[\begin{split}
A =
\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22}
\end{pmatrix}, \
B =
\begin{pmatrix}
b_{11} & b_{12}\\
b_{21} & b_{22}
\end{pmatrix}
\end{split}\]
とすると、行列積(matrix multiplication)は
\[\begin{split}
A B =
\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22}
\end{pmatrix}
\begin{pmatrix}
b_{11} & b_{12}\\
b_{21} & b_{22}
\end{pmatrix}
=
\begin{pmatrix}
a_{11} b_{11} + a_{12} b_{21} & a_{11} b_{12} + a_{12} b_{22} \\
a_{21} b_{11} + a_{22} b_{21} & a_{21} b_{12} + a_{22} b_{22}
\end{pmatrix}
\end{split}\]
ベクトルの直積との関係
2つのベクトル\(\boldsymbol{a}, \boldsymbol{b}\)のテンソル積
\[\begin{split}
\boldsymbol{a} \circ \boldsymbol{b}
= \boldsymbol{a} \otimes \boldsymbol{b}
= \boldsymbol{a} \boldsymbol{b}^T
= \begin{pmatrix}
a_1 \\ a_2 \\ \vdots \\ a_n
\end{pmatrix}
\begin{pmatrix}
b_1 & b_2 & \cdots & b_n
\end{pmatrix}
= \begin{pmatrix}
a_1 b_1 & a_1 b_2 & \cdots & a_1 b_n\\
a_2 b_1 & a_2 b_2 & \cdots & a_2 b_n\\
\vdots & \vdots & \ddots & \vdots \\
a_n b_1 & a_n b_2 & \cdots & a_n b_n
\end{pmatrix}
\end{split}\]
を直積(direct product)あるいは外積(outer product)という。
行列積と直積の関係
行列\(A, B\)の\(i\)番目の列ベクトルを\(\boldsymbol{a}_i, \boldsymbol{b}_i\)とし、行ベクトルを\(\boldsymbol{a}_i^T, \boldsymbol{b}_i^T\)とする。このとき、
\[
A^T B = \sum^n_{i=1} \boldsymbol{a}_i \boldsymbol{b}_i^T
\]
が成り立つ。この形式は計量経済学(回帰分析)の漸近正規性の証明などで多用される。
(例)\(A, B \in \mathbb{R}^{2\times 2}\)のとき、
\[\begin{split}
\begin{align}
A^T B &=
\begin{pmatrix}
a_{11} & a_{21}\\
a_{12} & a_{22}
\end{pmatrix}
\begin{pmatrix}
b_{11} & b_{12}\\
b_{21} & b_{22}
\end{pmatrix}
\\
&=
\begin{pmatrix}
a_{11} b_{11} + a_{21} b_{21} & a_{11} b_{12} + a_{21} b_{22}\\
a_{12} b_{11} + a_{22} b_{21} & a_{12} b_{12} + a_{22} b_{22}\\
\end{pmatrix}
\end{align}
\end{split}\]
であり、
\[\begin{split}
a_1
= \begin{pmatrix}
a_{11} \\
a_{12}
\end{pmatrix}
, \hspace{1em}
b_1^T =
\begin{pmatrix}
b_{11} & b_{12}\\
\end{pmatrix}
\end{split}\]
から
\[\begin{split}
\begin{align}
\sum^2_{i=1} \boldsymbol{a}_i \boldsymbol{b}_i^T
&= \begin{pmatrix}
a_{11} \\
a_{12}
\end{pmatrix}
\begin{pmatrix}
b_{11} & b_{12}
\end{pmatrix}
+ \begin{pmatrix}
a_{21} \\
a_{22}
\end{pmatrix}
\begin{pmatrix}
b_{21} & b_{22}
\end{pmatrix}
\\
&= \begin{pmatrix}
a_{11} b_{11} & a_{11} b_{12}\\
a_{12} b_{11} & a_{12} b_{12}
\end{pmatrix}
+ \begin{pmatrix}
a_{21} b_{21} & a_{21} b_{22}\\
a_{22} b_{21} & a_{22} b_{22}
\end{pmatrix}
\end{align}
\end{split}\]
であるため。
行列積との関係
行列の一部をベクトルで表して(=ブロック行列)、通常の行列積の定義をベクトルの積の形で表すこともできる
\(n\)次元正方行列\(A, B\)の\(i\)番目の列ベクトルを\(\boldsymbol{a}_i, \boldsymbol{b}_i\)とし、行ベクトルを\(\boldsymbol{a}_i^T, \boldsymbol{b}_i^T\)とする。このとき、
\[\begin{split}
\begin{align}
BA &=
\begin{pmatrix}
\boldsymbol{b}_{1}^T \\
\boldsymbol{b}_{2}^T \\
\vdots \\
\boldsymbol{b}_{n}^T
\end{pmatrix}
\begin{pmatrix}
\boldsymbol{a}_1, \boldsymbol{a}_2, \cdots, \boldsymbol{a}_n
\end{pmatrix}
=
\begin{pmatrix}
\boldsymbol{b}_{1}^T \boldsymbol{a}_1 & \boldsymbol{b}_{1}^T \boldsymbol{a}_2 & \cdots & \boldsymbol{b}_{1}^T \boldsymbol{a}_n\\
\boldsymbol{b}_{2}^T \boldsymbol{a}_1 & \boldsymbol{b}_{2}^T \boldsymbol{a}_2 & \cdots & \boldsymbol{b}_{2}^T \boldsymbol{a}_n\\
\vdots & \vdots & & \vdots\\
\boldsymbol{b}_{n}^T \boldsymbol{a}_1 & \boldsymbol{b}_{n}^T \boldsymbol{a}_2 & \cdots & \boldsymbol{b}_{n}^T \boldsymbol{a}_n\\
\end{pmatrix}
\end{align}
\end{split}\]
array([[10, 14],
[14, 20]])
行列と写像
行列は写像である
(平岡和幸, & 堀玄. (2004). プログラミングのための線形代数. 株式会社 オーム社.)
例:ベクトル\(x\)に行列\(A\)を掛けて\(y\)とする
\[
y = A x
\]
\(x\)を\(y\)に写す写像(≒関数)が行列\(A\)
連立一次方程式を行列で表すこともできる。
\[\begin{split}
\begin{cases}
\begin{align}
a_{11} x_1 + a_{12} x_2 + &\cdots + a_{1m} x_m = y_1\\
a_{21} x_1 + a_{22} x_2 + &\cdots + a_{2m} x_m = y_2\\
&\vdots\\
a_{n1} x_1 + a_{n2} x_2 + &\cdots + a_{nm} x_m = y_n\\
\end{align}
\end{cases}
\end{split}\]
のような連立一次方程式は、
\[\begin{split}
A = \begin{pmatrix}
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{pmatrix}
, \hspace{1em}
\b{x} = \begin{pmatrix}
x_1\\
x_2\\
\vdots\\
x_m
\end{pmatrix}
, \hspace{1em}
\b{y} = \begin{pmatrix}
y_1\\
y_2\\
\vdots\\
y_n
\end{pmatrix}
\end{split}\]
を用いて
\[
A\b{x} = \b{y}
\]
と表すことができる。
行列の計算規則
行列の和
\[
A(B+C) = AB + AC
\]
array([[ 2, -1],
[ 0, 0]])
array([[ 2, -1],
[ 0, 0]])
べき乗
\[\begin{split}
\begin{align}
AA &= A^2\\
AAA &= A^3
\end{align}
\end{split}\]
\[\begin{split}
\begin{align}
A^{n+m} &= A^n + A^m\\
(A^n)^m &= A^{nm}
\end{align}
\end{split}\]
普通の数取は異なる計算規則
\[\begin{split}
\begin{align}
(A + B)^2 &= A^2 + AB + BA + B^2\\
(A + B) (A - B) &= A^2 - AB + BA - B^2\\
(AB)^2 &= ABAB
\end{align}
\end{split}\]
左右を入れ替えなければどこにカッコをつけてもおなじ
例えばベクトル\(\boldsymbol{x} = (x_1, x_2, \dots, x_n)\)について、\(\boldsymbol{x} \boldsymbol{x}^T \boldsymbol{x}\)は\((\boldsymbol{x} \boldsymbol{x}^T) \boldsymbol{x}\)と捉えるより\(\boldsymbol{x} (\boldsymbol{x}^T \boldsymbol{x})\)としたほうが楽
\[\begin{split}
(\boldsymbol{x} \boldsymbol{x}^T) \boldsymbol{x}
=
\begin{pmatrix}
x_1^2 & x_1 x_2 & \cdots & x_1 x_n\\
x_2 x_1 & x_2^2 & \cdots & x_2 x_n\\
\vdots & \vdots & & \vdots\\
x_n x_1 & x_n x_2 & \cdots & x_n^2
\end{pmatrix}
\begin{pmatrix}
x_1\\
x_2\\
\vdots\\
x_n
\end{pmatrix}
=
\begin{pmatrix}
x_1^2 \cdot x_1 + x_1 x_2 \cdot x_2 + \cdots + x_1 x_n \cdot x_n\\
x_2 x_1 \cdot x_1 + x_2^2 \cdot x_2 + \cdots + x_2 x_n \cdot x_n\\
\vdots\\
x_n x_1 \cdot x_1 + x_n x_2 \cdot x_2 + \cdots + x_n^2 \cdot x_n
\end{pmatrix}
=
\begin{pmatrix}
x_1\\
x_2\\
\vdots\\
x_n
\end{pmatrix}
\sum^n_{i=1} x_i^2
\end{split}\]
\[\begin{split}
\boldsymbol{x} (\boldsymbol{x}^T \boldsymbol{x})
=
\begin{pmatrix}
x_1\\
x_2\\
\vdots\\
x_n
\end{pmatrix}
\sum^n_{i=1} x_i^2
\end{split}\]
ブロック行列
行列をいくつかのブロック(小行列)に分けて扱うことがある
\[\begin{split}
A=\left(\begin{array}{ccccc}
1 & 2 & 3 & \vdots & 4 \\
5 & 6 & 7 & \vdots & 8 \\
\ldots & \ldots & \ldots & \ldots & \ldots\\
9 & 10 & 11 & \vdots & 12
\end{array}\right)=\left(\begin{array}{ll}
A_{11} & A_{12} \\
A_{21} & A_{22}
\end{array}\right)
\end{split}\]
特に行ベクトルや列ベクトルに分けると扱いやすい
\[\begin{split}
A B=\left(\begin{array}{c}
\boldsymbol{a}_1 \\
\boldsymbol{a}_2 \\
\vdots \\
\boldsymbol{a}_m
\end{array}\right)\left(\begin{array}{lll}
\boldsymbol{b}_1^{\prime} & \cdots & \boldsymbol{b}_l{ }^{\prime}
\end{array}\right)=\left(\begin{array}{cccc}
\boldsymbol{a}_1 \boldsymbol{b}_1^{\prime} & \boldsymbol{a}_1 \boldsymbol{b}_2^{\prime} & \cdots & \boldsymbol{a}_1 \boldsymbol{b}_\iota{ }^{\prime} \\
\boldsymbol{a}_2 \boldsymbol{b}_1^{\prime} & \boldsymbol{a}_2 \boldsymbol{b}_2^{\prime} & \cdots & \boldsymbol{a}_2 \boldsymbol{b}_l{ }^{\prime} \\
\vdots & \vdots & & \vdots \\
\boldsymbol{a}_m \boldsymbol{b}_1^{\prime} & \boldsymbol{a}_m \boldsymbol{b}_2^{\prime} & \cdots & \boldsymbol{a}_m \boldsymbol{b}_l{ }^{\prime}
\end{array}\right)
\end{split}\]
\[\begin{split}
A B=\left(\begin{array}{c}
\boldsymbol{a}_1 \\
\boldsymbol{a}_2 \\
\vdots \\
\boldsymbol{a}_m
\end{array}\right) B=\left(\begin{array}{c}
\boldsymbol{a}_1 B \\
\boldsymbol{a}_2 B \\
\vdots \\
\boldsymbol{a}_m B
\end{array}\right)
\end{split}\]
\[
A B=A\left(\begin{array}{llll}
\boldsymbol{b}_1{ }^{\prime} & \boldsymbol{b}_2{ }^{\prime} & \cdots & \boldsymbol{b}_l{ }^{\prime}
\end{array}\right)=\left(\begin{array}{llll}
A \boldsymbol{b}_1{ }^{\prime} & A \boldsymbol{b}_2{ }^{\prime} & \cdots & A \boldsymbol{b}_l{ }^{\prime}
\end{array}\right)
\]
\[\begin{split}
A B=\left(\begin{array}{llll}
\boldsymbol{a}_1^{\prime} & \boldsymbol{a}_2^{\prime} & \cdots & \boldsymbol{a}_n{ }^{\prime}
\end{array}\right)\left(\begin{array}{c}
\boldsymbol{b}_1 \\
\boldsymbol{b}_2 \\
\vdots \\
\boldsymbol{b}_n
\end{array}\right)=\left(\boldsymbol{a}_1^{\prime} \boldsymbol{b}_1+\boldsymbol{a}_2^{\prime} \boldsymbol{b}_2+\cdots+\boldsymbol{a}_n{ }^{\prime} \boldsymbol{b}_n\right)
\end{split}\]
ブロック行列の積
一般に、積が定義可能な行列\(A, B\)に対して
\[\begin{split}
A =
\begin{pmatrix}
A_{11} & A_{12}\\
A_{21} & A_{22}
\end{pmatrix},
\hspace{2em}
B =
\begin{pmatrix}
B_{11} & B_{12}\\
B_{21} & B_{22}
\end{pmatrix}
\end{split}\]
と分割するとする。ここで\(A_{11} \in \mathbb{R}^{s \times r}, A_{12} \in \mathbb{R}^{s \times n-r}, A_{21} \in \mathbb{R}^{m-s \times r}, A_{22} \in \mathbb{R}^{m-s \times n-r}\)で、
\(B_{11}\in\mathbb{R}^{r \times t}, B_{12}\in\mathbb{R}^{r \times l-t}, B_{21}\in\mathbb{R}^{n-r \times t}, B_{22}\in\mathbb{R}^{n-r \times l-t}\)である。
このとき、
\[\begin{split}
A B =
\begin{pmatrix}
A_{11} & A_{12}\\
A_{21} & A_{22}
\end{pmatrix}
\begin{pmatrix}
B_{11} & B_{12}\\
B_{21} & B_{22}
\end{pmatrix}
=
\begin{pmatrix}
A_{11} B_{11}+A_{12} B_{21} & A_{11} B_{12}+A_{12} B_{22} \\
A_{21} B_{11}+A_{22} B_{21} & A_{21} B_{12}+A_{22} B_{22}
\end{pmatrix}
\end{split}\]
が成立する。
対角以外のブロック(\(A_{12}, A_{21}, B_{12}, B_{21}\))が零行列である場合
\[\begin{split}
\begin{pmatrix}
A_{11} & O\\
O & A_{22}
\end{pmatrix}
\begin{pmatrix}
B_{11} & O\\
O & B_{22}
\end{pmatrix}
=
\begin{pmatrix}
A_{11} B_{11} & O \\
O & A_{22} B_{22}
\end{pmatrix}
\end{split}\]
となる
対角以外の部分に零でないブロック\(*\)があっても、次のようになる
\[\begin{split}
\begin{aligned}
\begin{pmatrix}
A_{11} & O\\
* & A_{22}
\end{pmatrix}
\begin{pmatrix}
B_{11} & O\\
* & B_{22}
\end{pmatrix}
&=
\begin{pmatrix}
A_{11} B_{11} & O \\
*' & A_{22} B_{22}
\end{pmatrix}
\\
\begin{pmatrix}
A_{11} & *\\
O & A_{22}
\end{pmatrix}
\begin{pmatrix}
B_{11} & *\\
O & B_{22}
\end{pmatrix}
&=
\begin{pmatrix}
A_{11} B_{11} & *' \\
O & A_{22} B_{22}
\end{pmatrix}
\end{aligned}
\end{split}\]
ここで左辺の\(*\)はブロックのサイズが合えばなんでもよいことを意味し、右辺の\(*'\)はそのサイズのある定まった行列を表す(左辺と右辺で\(*\)の部分が等しいわけではない)
array([[ 5, 7, 3, 2],
[11, 15, 3, 5],
[ 0, 0, 6, 1],
[ 0, 0, 10, 1]])
array([[ 5, 7],
[11, 15]])
例:
\[\begin{split}
M =
\begin{pmatrix}
I & A\\
O & I
\end{pmatrix}
\end{split}\]
という行列があるとき、
\[\begin{split}
M^2 =
\begin{pmatrix}
I & A'\\
O & I
\end{pmatrix}
\end{split}\]
この\(A'\)の部分は\(A^2\)ではなく\(2A\)
array([[1, 0, 2, 4],
[0, 1, 6, 8],
[0, 0, 1, 0],
[0, 0, 0, 1]])
array([[ 7, 10],
[15, 22]])
array([[ 1, 0, 3, 6],
[ 0, 1, 9, 12],
[ 0, 0, 1, 0],
[ 0, 0, 0, 1]])
array([[ 1, 0, 0, 2, 4, 6],
[ 0, 1, 0, 8, 10, 12],
[ 0, 0, 1, 14, 16, 18],
[ 0, 0, 0, 1, 0, 0],
[ 0, 0, 0, 0, 1, 0],
[ 0, 0, 0, 0, 0, 1]])
array([[1, 2, 0, 0],
[3, 4, 0, 0],
[0, 0, 1, 2],
[0, 0, 3, 4]])
array([[-1, 0, 0, 0],
[ 0, -1, 0, 0],
[ 0, 0, -1, 0],
[ 0, 0, 0, -1]])
array([[ 0, -1, 0, 0],
[-1, 0, 0, 0],
[ 0, 0, 0, -1],
[ 0, 0, -1, 0]])