Edited at

やっぱり線形代数は必要 #3 行列

プログラミングのための線形代数 平岡 和幸(著), 堀 玄(著)オーム社」をまとめています。が、大学数学はほぼ独学なので、だいぶゆるふわ理解になると思います。どうぞご了承ください。間違っていたらぜひ指摘してください。

前の記事←→次の記事


「行列は写像」と捉えることが大切らしい

まず、あるベクトル$\boldsymbol{x}$に行列$A$をかけて、あるベクトル$\boldsymbol{y}$とする関係式について考えます。

\boldsymbol{y} = A \boldsymbol{x}

行列をちゃんと書くと

\begin{align}

\left(
\begin{matrix}
y_1\\
y_2\\
\vdots\\
y_n
\end{matrix}
\right)
&=
\left(
\begin{matrix}
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{matrix}
\right)
\left(
\begin{matrix}
x_1\\
x_2\\
\vdots\\
x_n
\end{matrix}
\right) \\
&=
\left(
\begin{matrix}
a_{11}x_{1} + a_{12}x_{2}+ \cdots + a_{1n}x_{n} \\
a_{12}x_{2} + a_{22}x_{2}+ \cdots + a_{2n}x_{n} \\
\vdots \\
a_{m1}x_{1} + a_{m2}x_{2}+ \cdots + a_{mn}x_{n} \\
\end{matrix}
\right)
\end{align}

ex.) 回転寿司でいくらを$x_い$皿、ねぎとろを$x_ね$皿食べたときの合計の値段とカロリーは?いくらは$a_{い値}$円$、a_{いカ}$カロリー、ねぎとろは$a_{ね値}$円、$a_{ねカ}$とする。

\begin{align}

y_{値段} &= a_{い値}x_{い} + a_{ね値}x_{ね}\\
y_{カロリー} &= a_{いカ}x_{い} + a_{ねカ}x_{ね}\\
\left(
\begin{matrix}
y_値\\
y_カ
\end{matrix}
\right)
&=
\left(
\begin{matrix}
a_{い値}x_{い} + a_{ね値}x_{ね} \\
a_{いカ}x_{い} + a_{ねカ}x_{ね}
\end{matrix}
\right) \\
&=
\left(
\begin{matrix}
a_{い値} & a_{ね値}\\
a_{いカ} & a_{ねカ}\\
\end{matrix}
\right)
\left(
\begin{matrix}
x_い\\
x_ね
\end{matrix}
\right)
\\
\boldsymbol{y}
&=
A \boldsymbol{x}

\end{align}

この、「あるベクトル$\boldsymbol{x}$に行列$A$をかけて、あるベクトル$\boldsymbol{y}$とする」関係式をもう少し詳しく見てみます。

ここで、前提ですが、行列の計算では、オレンジ色の部分の要素数(かける側の列数と、かけられる側の行数、この例だとn個)が一致していないとかけ算ができません。計算した結果は、オレンジ色以外の部分(mと1)の行数と列数になります(m行×1列)。行列の細かい計算方法は省きます...!

File.jpg

これをふまえて先ほどの関係式を詳しく見てみると、


  • $n$次元ベクトルに$m×n$行列$A$をかけると、$m$次元ベクトル$\boldsymbol{y}=A\boldsymbol{x}$が得られる

  • つまり、行列$A$は、ベクトル$\boldsymbol{x}$を別のベクトル$\boldsymbol{y}$に移す写像 ※。

※ 「写像」という言葉に馴染みがない場合、「変換」と読み替えると理解しやすいっぽいです。イメージは同じだが、正確な定義の「変換」は「対等のものに移す」という意味があるので、次元が変わったりする今回のようなのは、より広い意味の「写像」を使っているそう。

具体的に見てみると、例えば以下のような行列$A$で定義される空間の写像は、

A =

\left(
\begin{matrix}
1 & -0.3\\
-0.7 & 0.6\\
\end{matrix}
\right)

こんな感じの空間の変換になります。

output.gif

Picture1.png

ある一つの点Pが点P'に移っているのが分かります。さらに「行列はある点を別の点に移す」というイメージから少し拡張して、点P以外にも空間内のあらゆる点が移ることを考えると、「行列は『空間全体』を変形する」というイメージができます。

つまり、「$m×n$行列$A$は、$n$次元空間を$m$次元空間に移す写像」というイメージを持っておくといいようです。

(「$m×n$行列$A$は、$n$次ベクトルを$m$次ベクトルに移す写像。」を空間で言い換えた感じです。)


(1) 行列の積 = 写像の合成

「ベクトル$\boldsymbol{x}$に対して、写像$A$を施す。そのあとに、写像$B$を施す」というのは、下のように書けます。

B ( A \boldsymbol{x} ) = BA \boldsymbol{x}

$AB\boldsymbol{x}$ではないので注意。プログラムで考えると、secondFunc(firstFunc(x))`という感じ。行列のは、写像を連続で施したときの変形を示しているんですね。


(2) 行列のべき乗 = 写像の繰り返し

正方行列1$A$に対して、$AA = A^2$などと書けます。一つ上の例であったように、積は写像を合成したものなので、$A^2$は、$A$という変形を2回繰り返したことになります。

ここで、中学で習った展開公式を行列に当てはめた場合を見ておきます。$AB≠BA$なので、知っている公式と少し異なることに注意です。

\begin{align}

(A+B)^2 &= A^2 + AB + BA + B^2 \qquad(× A^2 + 2AB + B^2)\\
(A+B)(A-B) &= A^2 - AB + BA - B^2 \qquad(× A^2 - B^2)\\
(AB)^2 &= ABAB \qquad\qquad\qquad\quad(× A^2B^2)
\end{align}


(3) 特殊な行列


a) ゼロ行列

全ての成分が0である行列。記号$O$。ゼロ行列が表している写像は、全てを原点に移す写像。

1.gif


b) 単位行列

対角線上が1、それ以外は0の行列。記号$I$。単位行列が表している写像は、何もしない写像。

2.gif


c) 対角行列

正方行列の、「\」方向の対角成分以外が全て0の行列。対角行列が表している写像は、軸に沿って伸縮させる写像。対角成分が各軸の伸縮の割合。

・対角成分が全て正の行列:

3.gif

・対角成分に0を含む行列; 横方向がつぶれる

4.gif

・対角成分に負の数を含む行列: 裏返される

5.gif


(4) 逆行列 = 逆写像

正方行列$A$が施す変形を元に戻す写像を$A$の逆行列といい、$A^{-1}$で表す。$AA^{-1} = A^{-1}A = I$。

逆行列は存在したりしなかったりする。ぺちゃんこにつぶれる変形を施す写像の場合、つぶれた後の状態から元の点を復元(特定)できないので、逆行列は存在しない。詳しくは第2章で説明。

7.gif


(5) ブロック行列

ごつくてしんどい行列をブロックで分けて簡単にしようとするテクニック。

ex.)

\left(

\begin{array}{cc|cc}
1 & 0 & 0 & 0\\
0 & 1 & 0 & 0\\
\hline
3 & 1 & 1 & 0\\
4 & 1 & 0 & 1\\
\end{array}
\right)
\left(
\begin{array}{cc|cc}
5 & 9 & 5 & 3\\
2 & 6 & 5 & 8\\
\hline
0 & 0 & 1 & 0\\
0 & 0 & 0 & 1\\
\end{array}
\right)
=
\left(
\begin{array}{cc|cc}
5 & 9 & 5 & 3\\
2 & 6 & 5 & 8\\
\hline
17 & 33 & 21 & 17\\
22 & 42 & 25 & 21\\
\end{array}
\right)

ブロックをひとかたまりとして行列計算ルールを当てはめても、バラバラで計算したときと結果変わらない。

2.png


(6) いろいろな関係を行列で表す


a) 高階差分(差分方程式)

数列$x_1, x_2, \dots$が下のような式を満たしているとします。「次回の状態は最近の状態から決まる」的なモデルは、時系列解析とかでよく出てくるようです。

x_t = -0.7x_{t-1} - 0.5x{t_2} + 0.2x_{t-3} + 0.1x_{t-4}

ここで、$\boldsymbol{x}(t) = (x_t, x_{t-1}, x_{t-2}, x_{t-3})^T$とおくと、

\boldsymbol{x}(t) = 

\left(
\begin{matrix}
x_t \\
x_{t-1} \\
x_{t-2} \\
x_{t-3}
\end{matrix}
\right)
=
\left(
\begin{matrix}
-0.7 & -0.5 & 0.2 &0.1 \\
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 1
\end{matrix}
\right)
\left(
\begin{matrix}
x_{t-1} \\
x_{t-2} \\
x_{t-3} \\
x_{t-4}
\end{matrix}
\right)

つまり

\begin{align}

\boldsymbol{x}(t) &= A \boldsymbol{x}(t-1) \\
A &=
\left(
\begin{matrix}
-0.7 & -0.5 & 0.2 &0.1 \\
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0
\end{matrix}
\right)
\end{align}

と「なんかに行列をかけた式」で表せたりします2。繰り返しですが、この場合の$\boldsymbol{x}$は太字で、$(x_t, x_{t-1}, x_{t-2}, x_{t-3})^T$という列ベクトルを表したものであることに注意です。


b) 高階微分(微分方程式)

さっきは$x_t$を$x_{t-1}$とかの式で表して、「なんかに行列をかけた式」でも表せることを確認しました。

今度は微分版で、$x_t$を$dy/dt$で表した式がどうなるかを考えてみます3。数列$y(t), y(t-1), \dots$が下のような式を満たしているとします(これも「次回の状態は最近の状態から決まる」的なモデルで、さっきは$x_t$を$x_{t-1}$で考えていましたが、今度は差分ではなく前回の微分から求めています。なので繰り返し微分をするという意味で、高階微分)。

\frac{d^4y(t)}{dt^4} = -0.7\frac{d^3y(t)}{dt^3} - 0.5\frac{d^2y(t)}{dt^2} + 0.2\frac{dy(t)}{dt} + 0.1y(t)

ここで、$\boldsymbol{y}(t) = (\frac{d^3y(t)}{dt^3}, \frac{d^2y(t)}{dt^2}, \frac{dy(t)}{dt}, y(t))^T$とおくと、

\frac{ d \boldsymbol{y} (t) }{ dt } = 

\left(
\begin{matrix}
\frac{d^4y(t)}{dt^4} \\
\frac{d^3y(t)}{dt^3} \\
\frac{d^2y(t)}{dt^2} \\
\frac{dy(t)}{dt}
\end{matrix}
\right)
=
\left(
\begin{matrix}
-0.7 & -0.5 & 0.2 &0.1 \\
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0
\end{matrix}
\right)
\left(
\begin{matrix}
\frac{d^3y(t)}{dt^3} \\
\frac{d^2y(t)}{dt^2} \\
\frac{dy(t)}{dt} \\
y(t)
\end{matrix}
\right)
= A\boldsymbol{y}(t)

$A$はさっきの差分方程式での$A$と同じやつです(係数が同じだし)。ゴツく見えますが、要は、「一つ前の微分に行列$A$をかけた式」で現在の状態が表せる、ということです。行列を使って差分や微分で現象を記述するのは、工学分野でよく出てくるらしいです。4章で詳しくやります。


c) 定数項があるとき

$\boldsymbol{y}=A\boldsymbol{x}+\boldsymbol{b}$のように、「$+\boldsymbol{b}$」があって惜しくも「なんかに行列をかけた式に」なっていないやつ。

\boldsymbol{\tilde{x}}=

\left(
\begin{matrix}
\quad \\
\boldsymbol{x} \\
\quad \\
\hline
1
\end{matrix}
\right)
, \quad
\boldsymbol{\tilde{y}}=
\left(
\begin{matrix}
\quad \\
\boldsymbol{y} \\
\quad \\
\hline
1
\end{matrix}
\right)

とおけば(扱いやすいようにブロック化してる)、

\boldsymbol{\tilde{y}}=

\left(
\begin{matrix}
\quad \\
\boldsymbol{y} \\
\quad \\
\hline
1
\end{matrix}
\right)
=
\left(
\begin{array}{ccc|c}
\quad & \quad & \quad & \quad\\
\quad & A & \quad & \boldsymbol{b}\\
\quad & \quad & \quad & \quad\\
\hline
\quad & \boldsymbol{o}^T & \quad & 1\\
\end{array}
\right)
\left(
\begin{matrix}
\quad \\
\boldsymbol{x} \\
\quad \\
\hline
1 \\
\end{matrix}
\right)

と、「なんかに行列をかけた式」で表せるようになります。線形代数の一般論が使えるようにするため、頑張って「なんかに行列をかけた式」で表すことが大切なようです。


座標変換と行列

次回


今後の予定


  • 第1章 ベクトル・行列・行列式



  • 第2章 ランク・逆行列・一次方程式

  • 第3章 コンピュータでの計算(1)

  • 第4章 固有値・対角化・Jordan標準形

  • 第5章 コンピュータでの計算(2)





  1. 先述のように、行列はかける側の列数とかけられる側の行数が一致していないとかけ算できないので、正方行列でないとべき乗できません。 



  2. $A$の2行目以降は、単位行列で実質なんの働きもしていないし、多分便宜上のものだとおもう...。 



  3. $dx/dt$とさっきのに揃えてもいいんでしょうが、変数が同じだと混乱するので$dy/dt$にしているんだと思います。