Edited at

やっぱり線形代数は必要 #6 行列式=体積拡大率(2)

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

前の記事←→次の記事


(前回に引き続きおさえるべきこと) 行列式 = 体積拡大率

写像適用後の、空間の面積(3次なら体積)の拡大率は、行列式(determinant)という値で求められる。$det A = 0.75$とか$|A|=0.75$と表す。


1. 行列式の性質

前回


2. 行列式の計算の工夫


2.1 行列式を求める一般公式

行列式を求める公式を考えますが、最初からn次元で考えると大変なのでまずは3次元で考えます。

A = 

\left(
\begin{matrix}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33} \\
\end{matrix}
\right)

のとき、行列式$det A$は、

det A = \sum_{i,j,k} \epsilon_{ijk} a_{i1}a_{j2}a_{k3}

$\sum_{ijk}$は、$\sum_{i=1}^3 \sum_{j=1}^3 \sum_{k=1}^3$の省略です。「範囲1~3ってのは文脈からわかるでしょ」ということだそうです。

$A$の行列式は行列$A$の要素9つの何らかの積の組み合わせになるんだろうということを$a_{i1}a_{j2}a_{k3}$でまとめて(一般化して)表しています。

$a_{i1}a_{j2}a_{k3}$という、各要素の積にくっつく符号を$\epsilon_{ijk}$でまとめて(一般化して)表しています。$\epsilon_{ijk}$は、「次の規則↓に従って1か-1かどちらかになる係数」と定義します(→おさらい 行列の大事な性質)。


  1. $\epsilon_{123} = 1$

  2. 添字を入れ替えるとマイナスになる。例えば
    $\epsilon_{213} = -\epsilon_{123} = -1$ (1と2を入れ替え)
    $\epsilon_{312} = -\epsilon_{213} = \epsilon_{123}$ (2と3を入れ替え、さらに1と2を入れ替え)

  3. 添字に同じものがあるときは0。例えば
    $\epsilon_{113} = \epsilon_{232} = \epsilon_{333} = 0$

9要素全ての組み合わせの積を考えるものの、同じ添字が含まれてる場合は場合は$\epsilon$が0になるので、項が丸ごとなくなる。つまり、n列のうち1列から1要素、n行のうち1行から1要素選ぶの組み合わせ(順列1)だけ考えればいい。

Screen Shot 2018-11-29 at 12.36.35.png

これを踏まえて、大変だけど$\sum$を使わないで書き下すとこんな感じ2

\begin{align}

det A =
&+ \epsilon_{123}a_{11}a_{22}a_{33} + \epsilon_{132}a_{11}a_{32}a_{23} \\
&+ \epsilon_{231}a_{21}a_{32}a_{13} + \epsilon_{213}a_{21}a_{12}a_{33} \\
&+ \epsilon_{312}a_{31}a_{12}a_{23} + \epsilon_{321}a_{31}a_{22}a_{13} \\
=
&+ (a_{11}a_{22}a_{33} + a_{21}a_{32}a_{13} + a_{31}a_{12}a_{23}) \\
&- (a_{21}a_{12}a_{33} + a_{31}a_{22}a_{13} + a_{11}a_{32}a_{23}) \\
\end{align}



さて、これを一般のn次正方行列$A = a_{ij}$に応用すると、

A = 

\left(
\begin{matrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & a_{ij} & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn} \\
\end{matrix}
\right) \\
det A = \sum_{i_1, \cdots, i_n} \epsilon_{i_1, \cdots, i_n} a_{i_{1}1} \cdots a_{i_{n}n}

となるそうです。$\sum$や$\epsilon$の添字の$i_1, \cdots, i_n$は、総行数である$n$回分だけ(=総列数である$n$回分だけ3)$\sum$や$\epsilon$が存在してるよーということです(前述の3次のときは、$i_1$を$i$、$i_2$を$j$、$i_3$を$k$と表していました)。

正直一般式は何となく想像できるもののピンと来ていません。まあ、行列式を算出するのはきっとコンピュータがやってくれるし、「行列式=体積拡大率さえ分かればこの章は最悪読み飛ばしても構わない」との著者さんのお言葉を信じて、とりあえず先に進みます。


2次と3次のときにのみ使える「サラスの方法」4

行列式$detA$は、行列$A$の(\)方向の要素の積 - (/)方向の要素の積で求められるよ〜という便利な方法。2次と3次のときしか便利じゃないので注意。


2.2 実際の行列式の計算法

実際に手計算で行列するときは、前述の一般式ではなく「掃き出し法」という方法を使うらしいです。


準備 : 行列が特別な形のときに、行列式を求める式は「特別な形の変形」ができる

A = 

\left(
\begin{matrix}
a_{11} & 0 & 0 \\
0 & a_{22} & a_{23} \\
0 & a_{32} & a_{33} \\
\end{matrix}
\right)

という特別な形の場合には、$detA$は、

det A = a_{11} 

\left(
\begin{matrix}
a_{22} & a_{23} \\
a_{32} & a_{33} \\
\end{matrix}
\right)

こう変形することができる。

n次正方行列になっても同じようにこんな感じで「特別な形の変形」ができる。

\begin{align}

det A &=
\left(
\begin{array}{c|ccc}
a_{11} & 0 & 0 & 0 \\
\hline
0 & \quad & \quad & \quad \\
\vdots & \quad & A' & \quad \\
0 & \quad & \quad & \quad \\
\end{array}
\right)
\\
det A &= a_{11} \cdot det A'
\end{align}

さらには、1行目の2列目からn行目は別に0じゃなくてもよく、以下のように値があっても「特別な形の変形」は成り立つ(下画像灰色のように、1行目2列目以降を0にするように、1列目をいい感じに定数倍して2列目以降に足していく変形が可能だから)。

\begin{align}

det A &=
\left(
\begin{array}{c|ccc}
a_{11} & a_{12} & \cdots & a_{1n} \\
\hline
0 & \quad & \quad & \quad \\
\vdots & \quad & A' & \quad \\
0 & \quad & \quad & \quad \\
\end{array}
\right)
\\
det A &= a_{11} \cdot det A'
\end{align}


本番

では、これを使って行列式をどう求めていくかを見ていきます。数式書くの苦手なので手書きですいません...。 

例えば下の行列の行列式を求めるときは、

\left(

\begin{matrix}
2 & 1 & 3 & 2 \\
6 & 6 & 10 & 7 \\
2 & 7 & 6 & 6 \\
4 & 5 & 10 & 9
\end{matrix}
\right)

以下のように、「1行目のいい感じの定数倍を2行目以降に足して、「特別な形」を目指して変形していき、次元を減らし、最終的に2次元正方行列にしてサラスの方法で求める」という流れ。



こんな感じで「特別な形の変形」を使って行列式を求める手法を、「掃き出し法」と呼ぶらしい。


2.3 余因子展開と逆行列


2.3.1 余因子展開

余因子展開というのを導入するために、3次正方行列の行列式をちょっといじってみる。

File.jpg

上のように、1列目を分解して「特別な形の変形」をすると、くくり出される要素(☆)と、行列式に使われる要素(☆の行と列以外の部分)が何となくわかる。後者の、行列式に使われる要素(☆を$i$行$j$列とすると、$i$行と$j$列以外)を$\Delta'{ij}$と定義する。

$\Delta'{ij}$を使ってある3時正方行列$A$の行列式を書いてみると、こんな感じになります。

\begin{align}

det A &=
det
\left(
\begin{matrix}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33} \\
\end{matrix}
\right)
\\
&= a_{11}\Delta'_{11} - a_{21}\Delta'_{21} + a_{31}\Delta'_{31} \\
&= -a_{12}\Delta'_{12} + a_{22}\Delta'_{22} - a_{32}\Delta'_{32} \\
&= a_{13}\Delta'_{13} - a_{23}\Delta'_{23} + a_{33}\Delta'_{33}
\end{align}

下2行は、画像で経過を載せてはいませんが、画像の式展開で最初に1列目を分解したのと同じように、2列目を分解したとき、3列目を分解したとき、のそれぞれの結果です。

行列式が書き下されて見やすくなりましたが、符号がまちまちなので、

\Delta_{ij} = (-1)^{i+j} \Delta'_{ij}

という$\Delta_{ij}$を定義します。

$(-1)^{i+j}$とは、$i$が1増えれば符号が逆転、$j$が1増えても符号が逆転(偶数のとき1、奇数の時-1)という仕組みを果たすための係数。ジグザグに符号がスイッチするのを表現してる(プログラムっぽい...)。

これで、行列式を下のようにスッキリ書けるようになりました。

\begin{align}

detA
&= a_{11}\Delta_{11} + a_{21}\Delta_{21} + a_{31}\Delta_{31} \\
&= a_{12}\Delta_{12} + a_{22}\Delta_{22} + a_{32}\Delta_{32} \\
&= a_{13}\Delta_{13} + a_{23}\Delta_{23} + a_{33}\Delta_{33} \\
&= a_{1j}\Delta_{1j} + \cdots + a_{nj}\Delta_{nj} \\
(j &= 1, \cdots, n)
\end{align}

この$\Delta_{ij}$を余因子といい、上のように、行列式を余因子$\Delta_{ij}$を使ってスッキリ書くこと余因子展開(ラプラス展開)といいます。なんかかっこいい!


2.3.2 余因子行列を使って逆行列を一般化する

突然ですが、$A$の余因子行列(adjugate matrix)というものを下のように定義します。添字の順序に注意。$adjA$の$(i, j)$成分が$\Delta_{ji}$です($i$、$j$の順番ではなく$j$、$i$の順番)(なぜこの順番なのか謎...分かる方教えてください...)。

adjA = 

\left(
\begin{matrix}
\Delta_{11} & \Delta_{21} & \Delta_{31} \\
\Delta_{12} & \Delta_{22} & \Delta_{32} \\
\Delta_{13} & \Delta_{23} & \Delta_{33} \\
\end{matrix}
\right)

で、この$adjA$に右からAをかけたものをBとすると、以下のようになります。

(adjA)A = 

\left(
\begin{matrix}
\Delta_{11} & \Delta_{21} & \Delta_{31} \\
\Delta_{12} & \Delta_{22} & \Delta_{32} \\
\Delta_{13} & \Delta_{23} & \Delta_{33} \\
\end{matrix}
\right)
\left(
\begin{matrix}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33} \\
\end{matrix}
\right)
\equiv B
\\
\begin{align}
B &=
\left(
\begin{matrix}
a_{11}\Delta_{11}+a_{21}\Delta_{21}+a_{31}\Delta_{31} & ? & ? \\
? & a_{12}\Delta_{12}+a_{22}\Delta_{22}+a_{32}\Delta_{21} & ? \\
? & ? & a_{13}\Delta_{13}+a_{23}\Delta_{23}+a_{33}\Delta_{23}
\end{matrix}
\right)
\\
&=
\left(
\begin{matrix}
detA & ? & ? \\
? & detA & ? \\
? & ? & detA
\end{matrix}
\right)
\end{align}

この展開のうち、対角成分は上で出てきた行列式の書き下し(余因子展開)後と同じなので、$detA$に置き換えられます。非対角成分である「?」部分は、計算を進めていくと、同じ列の行列式を含む関係で全て0になります(はあ、よくわからんがまあそりゃそうなるんだろうという感じです...)。

\begin{align}

(adjA)A
&=
\left(
\begin{matrix}
detA & ? & ? \\
? & detA & ? \\
? & ? & detA
\end{matrix}
\right) \\
&=
\left(
\begin{matrix}
detA & 0 & 0 \\
0 & detA & 0 \\
0 & 0 & detA
\end{matrix}
\right)
&= (detA)I
\\
\frac{1}{detA}(adjA)A &= I
\end{align}

逆行列$A^{-1}$とは、「$A$にかけたら$I$になるやつ」でした。上の式の左辺をよーく見ると、$\frac{1}{detA}adjA$を$A$にかけて$I$になっています。なので、

A^{-1} = \frac{1}{detA} adjA

と、$A$の余因子行列$adjA$を使って$A$の逆行列を定義することができました。


まとめ


  • $n$次正方行列の行列式を求める一般公式はこれ

det A = \sum_{i_1, \cdots, i_n} \epsilon_{i_1, \cdots, i_n} a_{i_{1}1} \cdots a_{i_{n}n}


  • 手計算で求めるときは、「特別な形の変形」を駆使して最後サラスの方法

  • 余因子$\Delta_{ij}$を使うと、行列式がスッキリ書ける(=余因子展開、ラプラス展開)

  • 余因子行列$adjA$を使うと、逆行列を式で定義できる


今後の予定





  1. 順番が関係あるので、$_3P_3$通り。 



  2. $\epsilon$が$_3P_3=6$通り登場してることが確認できます。 



  3. 正方行列なので行でも列でも同じ。 



  4. 「たすきがけ」とも呼ばれてるらしいです。