行列式、ラプラス展開、逆行列、行列の割り算
この投稿では行列の除法とそのために前提となるいくつかの予備知識について記した。ただし行列同士の非可換的な乗法についての基礎知識があることを前提にしている。非可換というのは交換法則が成り立たないこと。
逆数
分数の割り算では後者の分数の分母と分子をひっくり返して掛け算をすることがよく知られている。
分子と分母をひっくり返した分数は元の分数の逆数と呼ばれている。英語で逆数はthe multiplicative inverseと呼ばれている。
例えば6の逆数は6分の1となる。
ある数をaとし、その逆数をxとすると、aとxを掛け算すると1になるという関係が成り立つ。
\( x \)を未知の逆数としてこの方程式を解くと\( \dfrac{1}{a} \)が得られる。そのために両辺をaで割っている。
aとその逆数であるa分の1とを掛け算すると、その答えは1になることが分かる。
例えば次のように。
単位行列
次のような行列は単位行列と呼ばれている。説明するよりもぱっと見た方が分かりやすい。
行列の左上端から右下端へと対角線上に1が並び、それ以外は0によって満たされていることが見て取れる。これらが単位行列。単位行列は対角行列の一種。
\( I \)の右下添字は行列の成分である1の数に対応している。\( I_2 \)は2次の単位行列、\( I_3 \)は3次の単位行列、\( I_4 \)は4次の単位行列。\( I \)は単位行列のことを英語でan identity matrixと呼ぶので、その頭文字。日本では\( I_n \)ではなく\( E_n \)と書かれていることもある。
単位行列はその名のとおり単位元の行列バージョン。単位行列は行列同士の掛け算において単位元として機能する。
単位元とは、ある演算の中で値をいつも変化させることがない数のこと。例えば実数の掛け算では1がそれに当たる。1にどんな実数のrを掛けても、どんな実数のrに1を掛けても、rの値は変わらない。
例えば\( f(x) = x \times 1 \)のような函数を考えてみる。この函数が出力する値は入力する値に等しく、いつも\( x \)になる。その意味で中立元や英語のように同一元と呼んでもいい。
行列の掛け算では単位行列が単位元の役割を果たしている。
この性質は2次に限らず、n次の正方行列とそれと同じn次の単位行列の間でも成り立つ。行の数mと列の数nが等しい(\( m = n \))行列は正方行列と呼ばれている。
\( A_n \)はn次の正方行列、\( I_n \)はn次の単位行列。
ただし、行列の掛け算で重要な点は交換法則が通常成り立たないこと。この性質は非可換性と呼ばれている。AとBが共に行列だとし、その非可換性を式で表すと次のようになる。
逆行列
行列の割り算も分数の割り算のときに逆数を掛けることと同様の方法でその答えを求めることができる。
行列の逆数とは何か。それが逆行列というもの。英語では逆行列の一様な呼び方がない。「逆の」を意味する形容詞のinverseを使ってthe inverse of a matrixと呼ばれていたりa matrix inverseやa matrix inversionと呼ばれていたりする。
逆行列は逆数と共に逆元として一般化できるもの。逆元は英語でan inverse element。
\( A_n \)をn次の正方行列、\( I_n \)をn次の単位行列としたとき、次のような関係が成り立てば\( X \)は\( A \)の逆行列。正方行列とは列数と行数とが等しい行列のこと。
このことは実数の掛け算においてaとその逆数xと掛け算の単位元である1との関係と同じ。
逆行列は負の指数を使って\( A^{-1} \)と表されることがある。これは\( \dfrac{1}{a} = a^{-1} \)と表すことに倣っている。
この\( A^{-1} \)を先程の関係式のXに代入すると次の式が得られる。
これは正方行列にその逆行列を掛けると単位行列が得られることを示している。しかもこの場合にかぎって交換法則が成り立つ。
行列式
行列式は正方行列を実数や複素数などのスカラーに変換するもの。スカラーとは行列と区別される単独の実数や複素数のこと。
n次の正方行列を入力すると、ある決まった実数や複素数を出力するような函数として行列式を考えることができる。
行列式は正方行列からその逆行列を導き出すために役に立つ。ただし、全ての正方行列が逆行列を持つわけではない。正方行列の行列式を計算することでその正方行列が逆行列を持つかどうかを確かめることができる。逆行列を持つことができる正方行列は行列式の値が0以外になる。そのような正方行列は特に正則行列と呼ばれている。
Aが正方行列だとするとその行列式は\( |A| \)や\( det\ A \)やdet(A)と表すことができる。detというのは行列式の英語の呼び方であるa determinantの略記。
2次の正方行列の行列式が最も簡単で、しかも行列式の基本となるもの。ここではAの添字の2によって2次の正方行列を表すことにする。
2次正方行列を次のように展開することによってその行列式を計算することができる。
\( ad - bc \)が2次正方行列の行列式。2次正方行列の対角線上の成分同士を掛けたadとbcとの差になっていることが分かる。\( ad + (-bc) \)と理解することもできる。
3次の正方行列の行列式はやや複雑。3次以上の正方行列ではラプラス展開を用いることによって行列式を求めることができる。ラプラス展開は余因子展開とも呼ばれている。
\( \begin{vmatrix} a & b & c \\ d & e & f \\ g & h & i \end{vmatrix} \)を3つの\( \begin{vmatrix} e & f \\ h & i \end{vmatrix} \)と\( \begin{vmatrix} d & f \\ g & i \end{vmatrix} \)と\( \begin{vmatrix} d & e \\ g & h \end{vmatrix} \)とに分けているところに注目。
これらの3つの部分は行列\( A_3 \)の1番目の行に沿ったa, b, cのそれぞれ小行列式と呼ばれている。小行列式はスカラー(実数か複素数)であり、\( ei - fh \)と\( di - fg \)と\( dh - eg \)で表すことができる。
各々の小行列式に対し、一定の規則と順番に従って1か-1を交互に掛けたものは、これらa, b, cのそれぞれ余因子と呼ばれている。
ここではaの\( \begin{vmatrix} e & f \\ h & i \end{vmatrix} = ei - fh \)、そしてbの\( -\begin{vmatrix} d & f \\ g & i \end{vmatrix} = -(di - fg) \)、そしてcの\( \begin{vmatrix} d & e \\ g & h \end{vmatrix} = dh - eg \)がそれぞれ余因子。
ラプラス展開ではこれらの余因子にそれらの元の成分の値であるa, b, cを掛ける手続きが必要になる。ただし、行列とスカラーである行列式とは異なるので、表記法が似ているからと言って、例えば\( a \begin{vmatrix} b & c \\ d & e \end{vmatrix} \)を行列のスカラー倍であると勘違いして\( \begin{vmatrix} a b & a c \\ a d & a e \end{vmatrix} \)と計算してしまうのは間違い。\(a (b e - c d) \)と計算するのが正しい。||で挟んだ小行列式の表記法では丸括弧が省略されてしまっているので要注意。
小行列式は行列の前にdetを添えて次のように表記されることもある。
ラプラス展開のアルゴリズムは一見すると複雑そうに見えるが、次の表を見れば一目瞭然。
ラプラス展開のアルゴリズム
- 次のような3次の正方行列があるとする。
\[ A = \begin{pmatrix} a & b & c \\ d & e & f \\ g & h & i \end{pmatrix} \]
- そのうちの行か列のいずれか1つを選ぶ。ここでは1番目の行(その成分はa, b, c)を選んだ。どの行、どの列を選んでも同じ計算結果が得られる。
\[ \begin{pmatrix} \colorbox{yellow}{\( a \)} & \colorbox{yellow}{\( b \)} & \colorbox{yellow}{\( c \)} \\ d & e & f \\ g & h & i \end{pmatrix} \]
a b c d e f g h i - 選んだ行の成分a, b, cについて、次のようにして各々の小行列式を求める。
\[ \begin{pmatrix} \cancel{\colorbox{yellow}{\( a \)}} & \cancel{b} & \cancel{c} \\ \cancel{d} & e & f \\ \cancel{g} & h & i \end{pmatrix} \]
a e f h i aが属す列と行を消した残り、したがって\( a \cdot \begin{vmatrix} e & f \\ h & i \end{vmatrix} = a(ei - fh) \)が得られる。
\[ \begin{pmatrix} \cancel{a} & \cancel{\colorbox{yellow}{\( b \)}} & \cancel{c} \\ d & \cancel{e} & f \\ g & \cancel{h} & i \end{pmatrix} \]b d f g i bが属す列と行を消した残り、したがって\( b \cdot \begin{vmatrix} d & f \\ g & i \end{vmatrix} = b(di - fg) \)が得られる。
\[ \begin{pmatrix} \cancel{a} & \cancel{b} & \cancel{\colorbox{yellow}{\( c \)}} \\ d & e & \cancel{f} \\ g & h & \cancel{i} \end{pmatrix} \]c d e g h cが属す列と行を消した残り、したがって\( c \cdot \begin{vmatrix} d & e \\ g & h \end{vmatrix} = c(dh - eg) \)が得られる。
- 小行列式に順番に正負の符号をそれぞれ割り振る。
符号の割り振り方は次のような規則に従う。ラプラス展開のために2.で選んだ任意の行ないし任意の列が奇数番目にあるときには「正負正負」という順番に交互に符号を割り振り、偶数番目にあるときには「負正負正」という順番に交互に符号を割り振る。
ここで選んだa, b, cは1番目の行なので、すなわち奇数番目の行なので、正負正負という順番で符号を小行列式に割り振ると、\( a \cdot \begin{vmatrix} e & f \\ h & i \end{vmatrix} \)と\( b \cdot -\begin{vmatrix} d & f \\ g & i \end{vmatrix} \)と\( c \cdot \begin{vmatrix} d & e \\ g & h \end{vmatrix} \)が得られることになる。
- 符号付きの小行列式(これを余因子と呼ぶ)同士を合計する。つまり足し算で繋ぐ。
\[ +a \cdot \begin{vmatrix} e & f \\ h & i \end{vmatrix} + b \cdot -\begin{vmatrix} d & f \\ g & i \end{vmatrix} + c \cdot \begin{vmatrix} d & e \\ g & h \end{vmatrix} \]
これらの符号及び演算子を整理すると次のようになる。
\[ a \begin{vmatrix} e & f \\ h & i \end{vmatrix} - b \begin{vmatrix} d & f \\ g & i \end{vmatrix} + c \begin{vmatrix} d & e \\ g & h \end{vmatrix} \] - 2次の正方行列の行列式を求めるときと同様のやり方によって更に展開すると、次のような行列式が最終的に得られることになる。
\[ \begin{align} |A| &= a \begin{vmatrix} \colorbox{yellow}{\( e \)} & \colorbox{cyan}{\( f \)} \\ \colorbox{cyan}{\( h \)} & \colorbox{yellow}{\( i \)} \end{vmatrix} - b \begin{vmatrix} \colorbox{yellow}{\( d \)} & \colorbox{cyan}{\( f \)} \\ \colorbox{cyan}{\( g \)} & \colorbox{yellow}{\( i \)} \end{vmatrix} + c \begin{vmatrix} \colorbox{yellow}{\( d \)} & \colorbox{cyan}{\( e \)} \\ \colorbox{cyan}{\( g \)} & \colorbox{yellow}{\( h \)} \end{vmatrix} \\ &= a(\colorbox{yellow}{\( ei \)} - \colorbox{cyan}{\( fh \)}) - b(\colorbox{yellow}{\( di \)} - \colorbox{cyan}{\( fg \)}) + c(\colorbox{yellow}{\( dh \)} - \colorbox{cyan}{\( eg \)}) \end{align} \]
ラプラス展開は3次以上のn次(n行n列)の正方行列にそのまま単純に拡張して応用することができる。基本形となる2次の小行列式になるまで展開し、それらの総和を計算すればいい。
ラプラス展開について具体例を挙げてみる。例えば次のような3次の正方行列があったとする。
この行列式はラプラス展開によって次のようになるはず。
やや入り組んだ計算だったのでMaximaを使って答え合わせをしてみた。Maximaではdeterminant()函数が行列式の役割を果たしてくれる。
$ maxima Maxima 5.42.1 http://maxima.sourceforge.net (中略) (%i1) A: matrix([-2,5,10],[12,7,-11],[3,-6,15]); [ - 2 5 10 ] [ ] (%o1) [ 12 7 - 11 ] [ ] [ 3 - 6 15 ] (%i2) determinant(A); (%o2) - 2073 (%i3) quit();
-2073というスカラーが得られた。
GNU Octaveでもdet()函数を用いて同じ結果が得られた。
$ octave GNU Octave, version 4.4.1 (中略) >> A_3 = [-2,5,10;12,7,-11;3,-6,15] A_3 = -2 5 10 12 7 -11 3 -6 15 >> det(A_3) ans = -2073 >> quit()
R言語でも確かめてみる。Rでもdet()函数が行列式の役目を果たしてくれる。ちなみに、R言語のmatrix()函数は列順序で値を配列してゆくので、c()函数の引数を行順序で指定した場合にはbyrow=Tの指定が必要になることに要注意。
$ R R version 3.5.2 (2018-12-20) -- "Eggshell Igloo" (中略) > A = matrix(c(-2,5,10,12,7,-11,3,-6,15),3,3) > A [,1] [,2] [,3] [1,] -2 12 3 [2,] 5 7 -6 [3,] 10 -11 15 > A = matrix(c(-2,5,10,12,7,-11,3,-6,15),3,3,byrow=T) > A [,1] [,2] [,3] [1,] -2 5 10 [2,] 12 7 -11 [3,] 3 -6 15 > det(A) [1] -2073 > q() Save workspace image? [y/n/c]: n
やはり-2073というスカラーが得られた。
Juliaではどうか。Juliaで行列式を求めるにはdet()函数を用いることができる。
$ julia _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.0.3 _/ |\__'_|_|_|\__'_| | Debian ⛬ julia/1.0.3+dfsg-4 |__/ | julia> A = [-2 5 10;12 7 -11;3 -6 15] 3×3 Array{Int64,2}: -2 5 10 12 7 -11 3 -6 15 julia> det(A) ERROR: UndefVarError: det not defined Stacktrace: [1] top-level scope at none:0
det()函数が見つからないとエラーが生じてしまった。線形代数を使うことをusingで明示的に指定する必要があるようだ。
julia> using LinearAlgebra julia> det(A) -2073.0 julia> exit()
Python 3でも試してみる。Python 3の場合にはNumpyをインポートしてnumpy.linalg.det()函数を呼び出す。
$ python3 Python 3.7.3 (中略) >>> import numpy as np >>> A = np.matrix('-2,5,10;12,7,-11;3,-6,15') >>> A matrix([[ -2, 5, 10], [ 12, 7, -11], [ 3, -6, 15]]) >>> i = np.linalg.det(A) >>> i -2072.9999999999995 >>> exit()
誤差がやや生じたけれどもPython3でも同様のスカラーが得られた。
ラプラス展開では、必ずしも行列の最上部の行を用いる必要はない。計算が最も簡単そうな任意の行や任意の列を選ぶことができる。どの行やどの列を選んでもラプラス展開によって同じ行列式の値が得られることは、ラプラス展開の定理のひとつとして知られている。
例えば次のような4次の正方行列があったとする。
この正方行列をラプラス展開する場合、0が2つある2行目を選ぶことは計算量を減らす点でより賢い道であるかもしれない。
各々の小行列式について更に展開する。2次正方行列の行列式と最終的に同じ形になるまで。
計算結果を元の式に代入して2次正方行列のときと同様の形の行列式を得ることができる。
このようにして-320という計算結果が最終的に得られた。
R言語で答え合わせ。det()函数で行列式を計算できる。
$ R R version 3.5.2 (2018-12-20) -- "Eggshell Igloo" (中略) > ele = c(-2,0,4,10,5,-5,7,-6,-3,0,-6,1,1,10,2,4) > A = matrix(ele,4,4) > A [,1] [,2] [,3] [,4] [1,] -2 5 -3 1 [2,] 0 -5 0 10 [3,] 4 7 -6 2 [4,] 10 -6 1 4 > det(A) [1] -320 > q() Save workspace image? [y/n/c]: n
n次の正方行列のラプラス展開
n次の正方行列のラプラス展開についておおざっぱに一般化してみた。
ある正方行列Aの中の各々の成分は\( a_{ij} \)か\( a_{i,j} \)と書かれる。aの添字のiは列番号を意味し、jは行番号を意味する。nを列か行の最終番号とする。
正方行列ではその定義からして列数mと行数nが等しいので\( m = n \)となる。したがって正方行列では列も行もその最終番号を共にnだけで示すことにする。
i\j | 1 | 2 | 3 | \( \cdots \) | n |
---|---|---|---|---|---|
1 | \( a_{11} \) | \( a_{12} \) | \( a_{13} \) | \( \cdots \) | \( a_{1n} \) |
2 | \( a_{21} \) | \( a_{22} \) | \( a_{23} \) | \( \cdots \) | \( a_{2n} \) |
3 | \( a_{31} \) | \( a_{32} \) | \( a_{33} \) | \( \cdots \) | \( a_{3n} \) |
\( \vdots \) | \( \vdots \) | \( \vdots \) | \( \vdots \) | \( \ddots \) | \( \vdots \) |
n | \( a_{n1} \) | \( a_{n2} \) | \( a_{n3} \) | \( \cdots \) | \( a_{nn} \) |
正方行列Aから\( a_{ij} \)が属す列iと行jとをすべて削除して残った部分の行列は小行列と呼ばれ、\( A_{ij} \)や\( A_{i,j} \)やA(i,j)などと書かれる。
例えば行列Aの成分の一つである\( a_{22} \)が属す行と列とを削除して残った部分、つまり色付けされているところがその小行列\( A_{22} \)を意味する。
i\j | 1 | 2 | 3 | \( \cdots \) | n |
---|---|---|---|---|---|
1 | \( a_{11} \) | \( a_{12} \) | \( a_{13} \) | \( \cdots \) | \( a_{1n} \) |
2 | \( a_{21} \) | \( a_{22} \) | \( a_{23} \) | \( \cdots \) | \( a_{2n} \) |
3 | \( a_{31} \) | \( a_{32} \) | \( a_{33} \) | \( \cdots \) | \( a_{3n} \) |
\( \vdots \) | \( \vdots \) | \( \vdots \) | \( \vdots \) | \( \ddots \) | \( \vdots \) |
n | \( a_{n1} \) | \( a_{n2} \) | \( a_{n3} \) | \( \cdots \) | \( a_{nn} \) |
このようにして得られた小行列\( A_{ij} \)の行列式は小行列式と呼ばれ、\( M_{ij} \)と書かれる。Mは英語で小行列式を意味するa minorに由来。\( minor(A)_{ij} \)のように書かれることもある。
小行列式\( M_{ij} \)に\( (-1)^{i+j} \)を掛けたものは余因子と呼ばれ、\( C_{ij} \)と書かれる。\( cof(A)_{ij} \)とも書かれる。Cとconfは英語で余因子を意味するa cofactorから来ている。
iは列番号、jは行番号。\( (-1)^{i+j} \)の指数部の\( i + j \)が何を意味しているのか直感的に分かりにくいかもしれないので、具体的に計算例をいくつか示してみる。
奇数列だと1, -1, 1, -1, ...となり、偶数列だと-1, 1, -1, 1, ...となっているのが見て取れる。このことは行を選んだ場合も同じ。
\( (-1)^{i+j} \)を掛けるということは、ある行列の成分の余因子によって作られる余因子行列の符号がちょうどチェッカーフラック状の幾何学的模様のように分布することに等しい。
\( +M_{11} \) | \( -M_{12} \) | \( +M_{13} \) | \( -M_{14} \) | \( +M_{15} \) | \( -M_{16} \) |
\( -M_{21} \) | \( +M_{22} \) | \( -M_{23} \) | \( +M_{24} \) | \( -M_{25} \) | \( +M_{26} \) |
\( +M_{31} \) | \( -M_{32} \) | \( +M_{33} \) | \( -M_{34} \) | \( +M_{35} \) | \( -M_{36} \) |
\( -M_{41} \) | \( +M_{42} \) | \( -M_{43} \) | \( +M_{44} \) | \( -M_{45} \) | \( +M_{46} \) |
\( +M_{51} \) | \( -M_{52} \) | \( +M_{53} \) | \( -M_{54} \) | \( +M_{55} \) | \( -M_{56} \) |
\( -M_{61} \) | \( +M_{62} \) | \( -M_{63} \) | \( +M_{64} \) | \( -M_{65} \) | \( +M_{66} \) |
1は掛け算における単位元なので、1をある数に掛けるとその数は変化しない。-1をある数に掛けるとその数の符号が変わる。正の数ならば負の数に、負の数ならば正の数に。
というわけで、n次の正方行列\( A_n \)の行列式は次のような多項式として定式化することができる。Cは符号付きの小行列式である余因子。iは列番号、jは行番号。
ラプラス展開のために任意の行\( a_{i1}, a_{i2}, \cdots, a_{in} \)を選ぶ場合は次のとおり。
ラプラス展開のために任意の列\( a_{1j}, a_{2j},\cdots, a_{nj} \)を選ぶ場合は次のとおり。
n次の正方行列の特定の行、もしくは特定の列を任意に選び、選んだ行ないし列の各成分とその小行列式と余因子とを掛け合わせ、そうして求めた各々の項をすべて合計する総和が、その正方行列の行列式と等しくなる。そしてその値はスカラー。
ラプラス展開では、行を選んでも列を選んでもその結果は等しいことが証明されている。
2次の正方行列のラプラス展開(?)
次のような2次正方行列があるとする。
これをラプラス展開してみる。例えばこの正方行列の1行目を選んでラプラス展開する場合は次のとおり。
aと同じ行と列にある成分を全て取り除き、残ったdがaについての小行列式。
a | |
d |
bと同じ行と列にある成分を全て取り除き、残ったcがbについての小行列式。
b | |
c |
2行目を選んでラプラス展開する場合は次のとおり。
cが属す行と列の成分を全て取り除き、残ったbがcについての小行列式。
b | |
c |
dが属す行と列の成分を全て取り除き、残ったaがdについての小行列式。
a | |
d |
ラプラス展開によって得られた小行列式に符号を適用して余因子を作る。この処理では1か-1を小行列式に交互に掛ける。1を掛けるか-1を掛けるかは、\( (-1)^{i + j} \)(iは列番号、jは行番号)によって決まる。列を選んだ場合にも同じ理屈が成り立つ。
正方行列\( A_2 \)の行列式は次のように計算される。成分aとその余因子dを掛け、成分bとその余因子-cを掛け、そしてそれらを足し合わせる。
あるいは、成分cとその余因子-bを掛け、成分dとその余因子aを掛け、そしてそれらを足し合わせる。
サラスのルール(3次正方行列限定)
行列式を求めるやり方にはラプラス展開を用いること以外にも、連立方程式で用いられるガウスの消去法(掃き出し法)など、様々な方法が開発されている。ガウスの消去法についてはまた別の機会に。
ここで取り上げるのは、3次の正方行列限定の方法として知られているサラスのルール。これはバスケット織りのメソッドという別名を持っている。たすき掛け法もこれとほぼ同様のやり方。
例えば次のような3次正方行列があるとする。
- この正方行列の左から2列をこの正方行列の右に追加して拡張する。次のように。
-2 5 10 -2 5 12 7 -11 12 7 3 -6 15 3 -6 - -2から斜め右下の15へ向けて対角線上に並んでいる数を掛け算する。この掛け算は行列同士の掛け算ではなく可換性の通常の掛け算のこと。
-2 5 10 -2 5 12 7 -11 12 7 3 -6 15 3 -6 \[ -2 \cdot 7 \cdot 15 = -210 \] - 5から斜め右下の3へ向けて対角線上に並んでいる数を掛け算する。
-2 5 10 -2 5 12 7 -11 12 7 3 -6 15 3 -6 \[ 5 \cdot -11 \cdot 3 = -165 \] - 10から斜め右下の-6へ向けて対角線上に並んでいる数を掛け算する。
-2 5 10 -2 5 12 7 -11 12 7 3 -6 15 3 -6 \[ 10 \cdot 12 \cdot -6 = -720 \] - 左上から右下への対角線上の数を掛け算することによって得られた積を足し算で繋ぐ。
\[ -210 + (-165) + (-720) \]
- 今度は逆方向。左下の3から斜め右上の10に向けて対角線上に並んでいる数を掛け算する。
-2 5 10 -2 5 12 7 -11 12 7 3 -6 15 3 -6 \[ 3 \cdot 7 \cdot 10 = 210 \] - -6から斜め右上の-2へ向けて対角線上に並んでいる数を掛け算する。
-2 5 10 -2 5 12 7 -11 12 7 3 -6 15 3 -6 \[ -6 \cdot -11 \cdot -2 = -132 \] - 15から斜め右上の5まで対角線上に並んでいる数を掛け算する。
-2 5 10 -2 5 12 7 -11 12 7 3 -6 15 3 -6 \[ 15 \cdot 12 \cdot 5 = 900 \] - 左下から右上へ(右上から左下へでもいい)の対角線上の数を掛け算して得られた積を今度は引き算で繋ぐ。
\[ 210 - (-132) - 900 \]
- 足し算で繋いだ式と引き算で繋いだ式とを引き算で繋ぎ合わせる。その際に足し算で繋いだ式が前に来る。こうして最終的な行列式が得られる。
\[ |A_3| = -210 + (-165) + (-720) - 210 - (-132) - 900 \]
この行列式を計算してみると、-2073というスカラーが得られた。ラプラス展開によって求めた場合と同じ数になることが分かる。
逆行列を求める
正方行列からその逆行列を見つけるにはどうするのか。
例えばAという2次正方行列があったとする。
Aの逆行列は\( A^{-1} \)と記すのが慣例。\( A^{-1} \)は次のような式によって表すことができる。
分数のところの分母の\( ad - bc \)の部分がこの2次正方行列Aの行列式。そしてその分数の右の行列の部分はaとdとが置き換わり、bとcの符号が反転していることが見て取れる。この行列の部分は(転置された)余因子行列と呼ばれ、adj\ Aやadj(A)と書かれることがある。
上の式は、Aの逆行列がAの(転置された)余因子行列をAの行列式で割ったものに等しいことを意味している。割り算が逆数による掛け算でもあることを思い出して。
これを先程の方程式に代入すると次のような関係式が完成する。
正方行列にその逆行列を掛ければ単位行列が得られることをこの関係式は意味している。この関係式は逆行列にその正方行列を掛けても成り立つ。
ただし、行列式が\( ad - bc = 0 \)のときにはこの関係式が成り立たないことに要注意。その場合、その正方行列には逆行列が存在しないことを意味している。
逆行列を持つ正方行列は可逆であると言い、逆行列を持っていない正方行列は特異であると言う。正方行列以外の行列は逆行列を持っていない。逆行列を持っている正方行列は特に正則行列と呼ばれている。
正則行列Aの逆行列がAの(転置された)余因子行列をAの行列式で割ったものに等しいことを示した先ほどの関係式に、実際の正則行列の各成分を代入してやれば、その正則行列の逆行列が得られることになる。
具体例を挙げてみる。次のような2次正方行列があったとする。
この正方行列の成分を逆行列に変換すると次のようになるはず。
これが正しいかどうかは、正則行列とその逆行列とを掛け算し、その答えが単位行列になるかどうかを確かめることで分かるはず。
行列の掛け算では交換法則が成り立たないので、正方行列とその逆行列を交換しても単位行列が得られるかどうかを確かめてみる。
いずれの場合も単位行列を得ることができた。
Maximanによって確かめてみる。Maximaで逆行列を得るにはinvert()函数を用いるか、Aが正則行列ならばA^^(-1);と入力する。
$ maxima Maxima 5.42.1 http://maxima.sourceforge.net (中略) (%i1) A: matrix([8,5],[3,2]); [ 8 5 ] (%o1) [ ] [ 3 2 ] (%i2) B: invert(A); [ 2 - 5 ] (%o2) [ ] [ - 3 8 ] (%i3) A.B; [ 1 0 ] (%o3) [ ] [ 0 1 ] (%i4) B.A; [ 1 0 ] (%o4) [ ] [ 0 1 ] (%i5) quit();
いずれも単位行列を得ることができた。
行列同士の乗法では交換法則が成り立たないので、Maximaを使って行列同士の掛け算を行うには非可換乗算演算子であるドット(.)演算子を用いる必要がある。乗算演算子としてアスタリスク(*)を用いると誤った結果を得るので要注意。
Juliaで逆行列を得るにはinv()函数を用いることができる。Juliaでは行列同士の掛け算にアスタリスク(*)を用いる必要がある。ドット(.)を用いると文法エラーが生じてしまう。
$ julia _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.0.3 _/ |\__'_|_|_|\__'_| | Debian ⛬ julia/1.0.3+dfsg-4 |__/ | julia> A = [8 5; 3 2] 2×2 Array{Int64,2}: 8 5 3 2 julia> B = inv(A) 2×2 Array{Float64,2}: 2.0 -5.0 -3.0 8.0 julia> A * B 2×2 Array{Float64,2}: 1.0 0.0 0.0 1.0 julia> B * A 2×2 Array{Float64,2}: 1.0 0.0 0.0 1.0 julia> exit()
Juliaでdet()函数を使うにはusing LinearAlgebraの指定が必要だが、inv()函数ではなぜかそれが不要。
Python3ではNumpyをインポートしてnumpy.linalg.inv()函数を用いることで逆行列を作成できる。
$ python3 Python 3.7.3 (中略) >>> import numpy as np >>> A = np.matrix('8,5;3,2') >>> print(A) [[8 5] [3 2]] >>> B = np.linalg.inv(A) >>> print(B) [[ 2. -5.] [-3. 8.]] >>> print(A @ B) [[1. 0.] [0. 1.]] >>> print(B @ A) >>> quit()
Python3の場合、行列同士の掛け算にはアットマーク(@)演算子を用いる。
逆行列を見つけるアルゴリズム
具体例をもう一つ挙げてみる。今度は3次の正方行列。
- ラプラス展開によって正方行列の全ての成分について各々の小行列式を求め、それらの小行列式の計算結果から小行列式の行列を作る。
\[ minor(A_3) = M = \begin{pmatrix} M_{11} & M_{12} & M_{13} \\ M_{21} & M_{22} & M_{23} \\ M_{31} & M_{32} & M_{33} \end{pmatrix} \]
\( M_{ij} \)は行列\( A_3 \)の各成分である\( a_{ij} \)をラプラス展開して得られた小行列式、そしてその計算結果であるスカラー。
\[ \begin{align} M_{11} &= \begin{vmatrix} -6 & 2 \\ 1 & 3 \end{vmatrix} \\ &= -6 \cdot 3 - 2 \cdot 1 \\ &= -18 - 2 \\ &= -20 \\\\ M_{12} &= \begin{vmatrix} 4 & 2 \\ -1 & 3 \end{vmatrix} \\ &= 4 \cdot 3 - 2 \cdot -1 \\ &= 12 - (-2) = 12 + 2 \\ &= 14 \\\\ M_{13} &= \begin{vmatrix} 4 & -6 \\ -1 & 1 \end{vmatrix} \\ &= 4 \cdot 1 - (-6) \cdot -1 \\ &= 4 - 6 \\ &= -2 \\\\ M_{21} &= \begin{vmatrix} 0 & -5 \\ 1 & 3 \end{vmatrix} \\ &= 0 \cdot 3 - (-5) \cdot 1 \\ &= 0 - (-5) = 0 + 5 \\ &= 5 \\\\ M_{22} &= \begin{vmatrix} -2 & -5 \\ -1 & 3 \end{vmatrix} \\ &= -2 \cdot 3 - (-5) \cdot -1 \\ &= -6 - 5 \\ &= -11 \\\\ M_{23} &= \begin{vmatrix} -2 & 0 \\ -1 & 1 \end{vmatrix} \\ &= -2 \cdot 1 - 0 \cdot -1 \\ &= -2 \\\\ M_{31} &= \begin{vmatrix} 0 & -5 \\ -6 & 2 \end{vmatrix} \\ &= 0 \cdot 2 - (-5) \cdot -6 \\ &= 0 - 30 \\ &= -30 \\\\ M_{32} &= \begin{vmatrix} -2 & -5 \\ 4 & 2 \end{vmatrix} \\ &= -2 \cdot 2 - (-5) \cdot 4 \\ &= -4 - (-20) = -4 + 20 \\ &= 16 \\\\ M_{33} &= \begin{vmatrix} -2 & 0 \\ 4 & -6 \end{vmatrix} \\ &= -2 \cdot -6 - 0 \cdot 4 \\ &= 12 \end{align} \]これらの小行列式の計算結果から得られたスカラーから、次のような行列を作ることができる。これが小行列式の行列。
\[ minor(A_3) = M = \begin{pmatrix} -20 & 14 & -2 \\ 5 & -11 & -2 \\ -30 & 16 & 12 \end{pmatrix} \] - 小行列式の行列に対して正負の符号を規則どおりに適用して余因子行列を作る。
正負の符号は\( M_{11} \)が正になるところから始まり、行列の最後の成分\( M_{nn} \)まで正負正負の順番で互い違いに適用される。
このことは小行列式の行列を構成する各々のスカラーに対して1と-1を交互に掛けてゆく処理と等しい。このような掛け算はアダマール積と呼ばれることがある。行列同士の通常の掛け算と異なるので要注意。アダマール積の演算子は\( \circ \)か\( \odot \)。
\[ \begin{align} cof(A_3) = C &= \begin{pmatrix} -20 & 14 & -2 \\ 5 & -11 & -2 \\ -30 & 16 & 12 \end{pmatrix} \circ \begin{pmatrix} 1 & -1 & 1 \\ -1 & 1 & -1 \\ 1 & -1 & 1 \end{pmatrix} \\\\ &= \begin{pmatrix} -20 \cdot 1 & 14 \cdot -1 & -2 \cdot 1 \\ 5 \cdot -1 & -11 \cdot 1 & -2 \cdot -1 \\ -30 \cdot 1 & 16 \cdot -1 & 12 \cdot 1 \end{pmatrix} \\\\ &= \begin{pmatrix} -20 & -14 & -2 \\ -5 & -11 & 2 \\ -30 & -16 & 12 \end{pmatrix} \end{align} \]こうして得られた行列は余因子行列と呼ばれているもの。英語ではa cofactor matrixのこと。
- その余因子行列を転置して余因子行列の転置行列を作る。これは\( adj\ A \)とかadj(A)とか\( C^T \)などと表される。
\[ adj(A_3) = C^T = (-1)^{i+j} M_{ji} \]
転置とは列(i)と行(j)とを次のように交替させること。つまり\( C_{ij} \rightarrow C_{ji} \)にする。
\[ C = \begin{pmatrix} \colorbox{yellow}{-20} & \colorbox{yellow}{-15} & \colorbox{yellow}{-2} \\ \colorbox{cyan}{-5} & \colorbox{cyan}{-11} & \colorbox{cyan}{2} \\ \colorbox{pink}{-30} & \colorbox{pink}{-16} & \colorbox{pink}{12} \end{pmatrix} \rightarrow C^T = \begin{pmatrix} \colorbox{yellow}{-20} & \colorbox{cyan}{-5} & \colorbox{pink}{-30} \\ \colorbox{yellow}{-15} & \colorbox{cyan}{-11} & \colorbox{pink}{-16} \\ \colorbox{yellow}{-2} & \colorbox{cyan}{2} & \colorbox{pink}{12} \end{pmatrix} \]a cofactor matrixを転置した行列も実は余因子行列と呼ばれている。転置された余因子行列は英語ではan adjugate matrixなので、adjはその略記。
以下、転置された余因子行列のことをここでは転置余因子行列と呼ぶことにする。
- 行列\( A_3 \)をラプラス展開して行列式を計算する。
この計算は、例えば元の行列の一行目の成分\( a_{11}\ a_{12}\ a_{13} \)とそれと同じ位置にある余因子行列の成分\( C_{11}\ C_{12}\ C_{13} \)とを利用し、次のように簡単に行うことができる。
\[ A_3 = \begin{pmatrix} \colorbox{yellow} {-2} & \colorbox{yellow}{0} & \colorbox{yellow}{-5} \\ 4 & -6 & 2 \\ -1 & 1 & 3 \end{pmatrix} \] \[ C = \begin{pmatrix} \colorbox{yellow}{-20} & \colorbox{yellow}{-14} & \colorbox{yellow}{-2} \\ -5 & -11 & 2 \\ -30 & -16 & 12 \end{pmatrix} \]\[ \begin{align} |A_3| &= a_{11}C_{11} + a_{12}C_{12} + a_{13}C_{13} \\ &= -2 \cdot -20 + 0 \cdot -14 + (-5) \cdot -2 \\ &= 40 + 0 + 10 \\ &= 50 \end{align} \]2列目を選んだ場合は次のように計算できる。
\[ A_3 = \begin{pmatrix} -2 & \colorbox{yellow}{0} & -5 \\ 4 & \colorbox{yellow}{-6} & 2 \\ -1 & \colorbox{yellow}{1} & 3 \end{pmatrix} \] \[ C = \begin{pmatrix} -20 & \colorbox{yellow}{-14} & -2 \\ -5 & \colorbox{yellow}{-11} & 2 \\ -30 & \colorbox{yellow}{-16} & 12 \end{pmatrix} \]\[ \begin{align} |A_3| &= a_{12}C_{12} + a_{22}C_{22} + a_{32}C_{32} \\ &= 0 \cdot -14 + -6 \cdot -11 + 1 \cdot -16 \\ &= 0 + 66 + (-16) = 0 + 66 - 16 \\ &= 50 \end{align} \]どの行、またはどの列を選んでも、その成分を合計すれば、50というスカラーが得られるはず。
- 3.で得られた転置余因子行列と4.で得られた行列式のスカラーによって逆行列が次のとおりに定まる。
\[ \begin{align} A_3^{-1} &= \dfrac{1}{50} \cdot \begin{pmatrix} -20 & -5 & -30 \\ -14 & -11 & -16 \\ -2 & 2 & 12 \end{pmatrix} \\\\ &= \begin{pmatrix} -\dfrac{20}{50} & -\dfrac{5}{50} & -\dfrac{30}{50} \\ -\dfrac{14}{50} & -\dfrac{11}{50} & -\dfrac{16}{50} \\ -\dfrac{2}{50} & \dfrac{2}{50} & \dfrac{12}{50} \end{pmatrix} \\\\ &= \begin{pmatrix} -\dfrac{2}{5} & -\dfrac{1}{10} & -\dfrac{3}{5} \\ -\dfrac{7}{25} & -\dfrac{11}{50} & -\dfrac{8}{25} \\ -\dfrac{1}{25} & \dfrac{1}{25} & \dfrac{6}{25} \end{pmatrix} \end{align} \]
約分しているがしなくてもいい。正則行列の逆行列がその正則行列の転置余因子行列をその正則行列の行列式で割ったものであることが見て取れる。
- 元の正則行列と逆行列との掛け算をして単位行列が得られるかどうかを確認してみる。
この掛け算は行列同士の通常どおりの非可換性の乗法に従う。というわけで行列同士の掛け算では交換法則が通常は成り立たない。しかし、逆行列であることを確認するためには、掛けられる行列と掛ける行列を置き換えても単位行列が得られる必要があることに要注意。
\[ \begin{align} \begin{pmatrix} -2 & 0 & -5 \\ 4 & -6 & 2 \\ -1 & 1 & 3 \end{pmatrix} \cdot \begin{pmatrix} -\dfrac{2}{5} & -\dfrac{1}{10} & -\dfrac{3}{5} \\ -\dfrac{7}{25} & -\dfrac{11}{50} & -\dfrac{8}{25} \\ -\dfrac{1}{25} & \dfrac{1}{25} & \dfrac{6}{25} \end{pmatrix} &= \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} \end{align} \] \[ \begin{align} \begin{pmatrix} -\dfrac{2}{5} & -\dfrac{1}{10} & -\dfrac{3}{5} \\ -\dfrac{7}{25} & -\dfrac{11}{50} & -\dfrac{8}{25} \\ -\dfrac{1}{25} & \dfrac{1}{25} & \dfrac{6}{25} \end{pmatrix} \cdot \begin{pmatrix} -2 & 0 & -5 \\ 4 & -6 & 2 \\ -1 & 1 & 3 \end{pmatrix} &= \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} \end{align} \]
この計算はやややっかいなのでMaximaに任せよう。
matrix()函数で行列を作り、invert()函数で逆行列を得る。ドット演算子(.)を用いて非可換性の乗法を行うと、いずれも単位行列が得られることが分かる。コロン(:)はMaximaでは変数への代入演算子。
$ maxima Maxima 5.42.1 http://maxima.sourceforge.net (中略) (%i1) A: matrix([-2,0,-5],[4,-6,2],[-1,1,3]); [ - 2 0 - 5 ] [ ] (%o1) [ 4 - 6 2 ] [ ] [ - 1 1 3 ] (%i2) IA: invert(A); [ 2 1 3 ] [ - - - -- - - ] [ 5 10 5 ] [ ] [ 7 11 8 ] (%o2) [ - -- - -- - -- ] [ 25 50 25 ] [ ] [ 1 1 6 ] [ - -- -- -- ] [ 25 25 25 ] (%i3) A.IA; [ 1 0 0 ] [ ] (%o3) [ 0 1 0 ] [ ] [ 0 0 1 ] (%i4) IA.A; [ 1 0 0 ] [ ] (%o4) [ 0 1 0 ] [ ] [ 0 0 1 ] (%i5) quit();
ちなみに、余因子行列の転置行列\( C^T \)をMaximaで得るにはadjoint()函数を用いる。単位行列を作るにはident()函数を用いる。ident()函数の括弧内の引数には次数(n次の正方行列のnの数)を指定する。
Maximaで小行列式を得るにはminor(正方行列,列番号,行番号)函数を利用できる。
$ maxima Maxima 5.42.1 http://maxima.sourceforge.net (中略) (%i1) A: matrix([-2,0,5],[4,-6,2],[-1,1,3]); [ - 2 0 5 ] [ ] (%o1) [ 4 - 6 2 ] [ ] [ - 1 1 3 ] (%i2) minor(A,1,1); [ - 6 2 ] (%o2) [ ] [ 1 3 ] (%i3) minor(A,1,2); [ 4 2 ] (%o3) [ ] [ - 1 3 ] (%i4) minor(A,1,3); [ 4 - 6 ] (%o4) [ ] [ - 1 1 ] (%i5) quit();
GNU Octaveではinv()函数を使うと逆行列を生成することができる。
$ octave GNU Octave, version 4.4.1 Copyright (C) 2018 John W. Eaton and others. (中略) >> A = [-2,0,-5;4,-6,2;-1,1,3] A = -2 0 -5 4 -6 2 -1 1 3 >> B = inv(A) B = -0.400000 -0.100000 -0.600000 -0.280000 -0.220000 -0.320000 -0.040000 0.040000 0.240000 >> A*B ans = 1.00000 0.00000 0.00000 -0.00000 1.00000 -0.00000 0.00000 0.00000 1.00000 >> B*A ans = 1.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 >> quit()
行列同士の割り算(除法)
行列同士の割り算は通常は定義されていないようだ。ただし、スカラー同士の割り算が割る数の逆数を掛けることに等しかったように、行列にもいくつかの条件の下でそのことを応用できる。
AとBが共に行列であるとき、その割り算を次のように定義できる。\( B^{-1} \)はBという行列の逆行列を意味している。
割られる行列であるAは被除算行列、割る行列であるBは除算行列と呼ばれている。
行列同士の割り算が成り立つためには除算行列がその逆行列を持つ必要があるので、Bは正則行列である必要がある。
正則行列とは、列数と行数が同じこと、つまり正方行列であることと、その行列式が0でないこと、つまり可逆であることとが共に満たされた行列のこと。
さらに、AとBの逆行列\( B^{-1} \)が掛け算可能である必要がある。行列同士の通常の掛け算が可能になるのは、Bの次元とAの列の数ないしAの行の数が一致している場合。
例として2列の行ベクトルと2次の正方行列の割り算を試してみる。
Juliaを用いて答え合わせ。
$ julia (中略) julia> A = [-1 3] 1×2 Array{Int64,2}: -1 3 julia> B = [1 4; -2 5] 2×2 Array{Int64,2}: 1 4 -2 5 julia> invB = inv(B) 2×2 Array{Float64,2}: 0.384615 -0.307692 0.153846 0.0769231 julia> A * invB 1×2 Array{Float64,2}: 0.0769231 0.538462 julia> 1/13 0.07692307692307693 julia> 7/13 0.5384615384615384 julia> exit()
分数と小数との違いはあるが、ほぼ同じ計算結果が得られた。
行列同士の割り算のアルゴリズム
- 割られる行列(被除算行列)と割る行列(除算行列)の行数と列数、列数と行数とが、共に等しいか、あるいはどちらか一方が等しいことを確認する。つまり、行列同士の掛け算が可能かどうかを確かめる。
行列同士の割り算は結局は行列同士の掛け算をする処理になるので、それが成り立つ条件を満たさなければいけない。
\[ \begin{pmatrix} \colorbox{yellow}{-1} & \colorbox{yellow}{3} \end{pmatrix} \div \begin{pmatrix} \colorbox{yellow}{1} & 4 \\ \colorbox{yellow}{-2} & 5 \end{pmatrix} \]これらは行数と列数とが等しいのでその条件を満たしている。
- 除算行列の行数と列数とが等しいことを確認。つまり除算行列が正方行列であるという条件を満たすかどうかを見定める。
\[ \begin{pmatrix} 1 & 4 \\ -2 & 5 \end{pmatrix} \]
この除算行列は\( 2 \times 2 \)の正方行列であるのでその条件を満たしている。
- 除算行列が正則行列であること、つまりその行列式が0でないこと、すなわち逆行列を持つことを確かめる。そのためには除算行列の行列式を解く。
\[ \begin{align} \begin{vmatrix} 1 & 4 \\ -2 & 5 \end{vmatrix} &= (1 \cdot 5) - (-4 \cdot 2) \\ &= 5 - (-8) \\ &= 5 + 8 \\ &= 13 \end{align} \]
除算行列の行列式は13。0でないので可逆、つまり逆行列を持つ。正則行列であるという条件を満たしていることが分かる。
- 除算行列の転置余因子行列を求める。
2次の場合は簡単。
\[ cof \begin{pmatrix} 1 & 4 \\ -2 & 5 \end{pmatrix} = \begin{pmatrix} 5 & -2 \\ 4 & 1 \end{pmatrix} \]除算行列の成分1の小行列は5、成分4の小行列は-2、成分-2の小行列は4、成分5の小行列は1。
これにお約束どおりに正負正負という符号を適用する(アダマール積を取る)と次のようになる。
\[ \begin{align} adj \begin{pmatrix} 1 & 4 \\ -2 & 5 \end{pmatrix} &= \begin{pmatrix} 5 & -2 \\ 4 & 1 \end{pmatrix} \circ \begin{pmatrix} 1 & -1 \\ -1 & 1 \end{pmatrix} \\\\ &= \begin{pmatrix} 1 \cdot 5 & -1 \cdot -2 \\ -1 \cdot 4 & 1 \cdot 1 \end{pmatrix} \\\\ &= \begin{pmatrix} 5 & 2 \\ -4 & 1 \end{pmatrix} \end{align} \]これを転置すると転置余因子行列の出来上がり。
\[ \begin{pmatrix} 5 & 2 \\ -4 & 1 \end{pmatrix}^T = \begin{pmatrix} 5 & -4 \\ 2 & 1 \end{pmatrix} \] - 除算行列の行列式と除算行列の転置余因子行列とを材料にして除算行列の逆行列を作る。
\[ \begin{pmatrix} 1 & 4 \\ -2 & 5 \end{pmatrix}^{-1} = \dfrac{1}{13} \cdot \begin{pmatrix} 5 & -4 \\ 2 & 1 \end{pmatrix} = \begin{pmatrix} \dfrac{5}{13} & -\dfrac{4}{13} \\ \dfrac{2}{13} & \dfrac{1}{13} \end{pmatrix} \]
- 被除算行列と除算行列の逆行列とで行列同士の通常の乗算、つまり非可換性の掛け算をする。
\[ \begin{align} \begin{pmatrix} -1 & 3 \end{pmatrix} \cdot \begin{pmatrix} \dfrac{5}{13} & -\dfrac{4}{13} \\ \dfrac{2}{13} & \dfrac{1}{13} \end{pmatrix} &= \begin{pmatrix} -1 \cdot \dfrac{5}{13} + 3 \cdot \dfrac{4}{13} & -1 \cdot -\dfrac{4}{13} + 3 \cdot \dfrac{1}{13} \end{pmatrix} \\ &= \begin{pmatrix} -\dfrac{5}{13} + \dfrac{6}{13} & \dfrac{4}{13} + \dfrac{3}{13} \end{pmatrix} \\ &= \begin{pmatrix} \dfrac{1}{13} & \dfrac{7}{13} \end{pmatrix} \end{align} \]
コンピュータで答え合わせ。
GNU Octaveでは次のように計算することができる。det()関数は行列式を出力し、inv()関数は逆行列を出力する。
$ octave GNU Octave, version 4.4.1 (中略) >> A = [-1,3] A = -1 3 >> B = [1,4;-2,5] B = 1 4 -2 5 >> det(B) ans = 13 >> B * inv(B) ans = 1 0 0 1 >> inv(B) * B ans = 1 0 0 1 >> A * inv(B) ans = 0.076923 0.538462 >> 1 / 13 ans = 0.076923 >> 7 / 13 ans = 0.53846 >> quit()
Maximaでは次のように計算できる。Maximaでは非可換性乗法にはドット演算子を使う。
$ maxima Maxima 5.42.1 http://maxima.sourceforge.net (中略) (%i1) A: matrix([-1,3]); (%o1) [ - 1 3 ] (%i2) B: matrix([1,4],[-2,5]); [ 1 4 ] (%o2) [ ] [ - 2 5 ] (%i3) B . invert(B); [ 1 0 ] (%o3) [ ] [ 0 1 ] (%i4) invert(B) . B; [ 1 0 ] (%o4) [ ] [ 0 1 ] (%i5) A . invert(B); [ 1 7 ] (%o5) [ -- -- ] [ 13 13 ] (%i6) float(A . invert(B)); (%o6) [ 0.07692307692307693 0.5384615384615384 ] (%i7) quit();
まとめ
- 逆数
- 英語でa multiplicative inverseのこと。aの逆数xは\( x = 1 \div a \)によって得られる。aを分数に直してその分母と分子をひっくり返しても得られる。
- \[ a = \dfrac{a}{1} \rightarrow \dfrac{1}{a} \]
- 単位元
- ある演算システムにおいて他の数を変化させることがない数。中立元とも同一元とも言える数。英語ではan identity elementのこと。足し算では0が単位元。英語ではthe additive identity。掛け算では1が単位元。英語ではthe multiplicative identity。
- \[ a + 0 = 0 + a = a \] \[ a \times 1 = 1 \times a = a \]
- 正方行列
- 列の数と行の数とが等しい行列。正方形のような形をしている。英語ではa square matrix。
- \[ A = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ a_{31} & a_{32} & \cdots & a_{3n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{pmatrix} \]
- 行列を表すときに通常は、最終の列番号をmで、最終の行番号をnで表すことが多いが、正方行列では\( m = n \)となるので、ここではどちらもnで表している。
- n次の正方行列
- 列数がnで、行数がnの正方行列は、n次の正方行列と呼ばれている。Aを正方行列とすると、\( A_n \)のように添字で表記されることがある。
- 行列式
- 各々の正方行列から計算することができる一意のスカラー。その値が0の場合もある。ある正方行列を与えるとそれに対応する一意の実数か一意の複素数を出力する函数であると考えることができる。
- 正方行列を\( A \)とすると、その行列式は\( |A| \)や\( det\ A \)やdet(A)のように表記されることがある。detは英語のa determinantの略記。
- 2次の正方行列\( A = \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix} \)の行列式は\( A^{-1} = a_{11}a_{22} - a_{12}a_{21} \)と計算することができ、これが行列式の基本となる。
- Maximaではdeterminant()函数に、GNU Octaveではdet()函数に、Juliaではusing LinearAlgebraを宣言しておいてdet()函数に、R言語ではdet()函数に、Python3ではnumpyをインポートしておいてnumpy.linalg.det()函数に、正方行列を渡せば行列式を出力してくれる。
- スカラー
- 線形代数においてベクトルや行列やテンソルでない単独の数の総称。英語ではa scalar。実数か複素数。行列式や行列のスカラー倍で使われる。
- ラプラス展開(線形代数における)
- 3次以上の正方行列の行列式を計算するために2次の正方行列の行列式の形になるまでそれを展開してゆく方法。余因子展開とも呼ばれている。英語ではthe Laplace expansion、もしくはthe cofactor expansion。
- 正方行列のどれか1つの行か列を選んでその各成分についての小行列式\( M_{ij} \)を求め、その小行列式に1か-1を一定の規則に従って掛けること(\( (-1)^{i+j} M_{ij} \))によって正負の符号を持つ余因子\( C_{ij} \)を作り、その余因子に元の成分を掛ける(\( a_{ij}C_{ij} \))。1つの実数か複素数の値が得られるまでそれらの処理を繰り返しながら次々と合計してゆく。何番目の列または行に沿った小行列による行列式のラプラス展開と言い表したりする。
- \[ |A| = \sum_{j=1}^n a_{ij} (-1)^{i+j} M_{ij} = \sum_{i=1}^n a_{ij} (-1)^{i+j} M_{ij} \]
- どの列またはどの行を選んでも同じ計算結果が得られることが定理として証明されている。
- サラスのルール
- 3次の正方行列限定の行列式計算法。サラスの規則、サラスの法則、サラスの方法などとも呼ばれている。英語ではthe rule of SarrusないしSarrus' rule。日本でよく目にする「たすき掛け」と呼ばれている方法もこれの一種。
- 3次の正方行列の1列目と2列目をコピーして3列目の右隣に貼り付ける。
- 左上から右下への対角線上の成分を掛けて3つの項を作る。
- 次に右上から左下への対角線上の成分を掛けて3つの項を作る。
- 前者の3つの項に正の符号を与え、後者の3つの項には負の符号を与える。
- それらを合計すると、その3次正方行列の行列式が求まる。
- これを修正してn次の正方行列にも応用できるようにする試みがあるようだ。
- 逆行列
- 逆数の行列版のようなもの。英語ではan inverse matrixと呼ばれている。
- 全ての正則行列にはその逆行列がある。逆行列は正則行列の転置後の余因子行列の各成分を正則行列の行列式で割ったもの。つまり、正則行列をAとし、Aの逆行列を\( A^{-1} \)とし、転置された余因子行列を\( adj\ A \)とし、Aの行列式を\( det\ A \)とすると次の関係が成り立つ。
- \[ A^{-1} = \dfrac{adj\ A}{det\ A} = \dfrac{1}{det\ A} adj\ A \]
- Maximaではinvert()函数に、GNU Octaveではinv()函数に、Juliaではinv()函数に、Python3ではNumpyをインポートしてからnumpy.linalg.inv()函数に、R言語ではinv()函数に、正則行列を渡せばその逆行列を出力してくれる。ただしR言語ではmatlibというライブラリが必要になる。
- 正則行列
- 正方行列で、かつ、その行列式の値が0でない行列のこと。可逆であるとか非特異であるとも呼ばれている。正則行列だけがその逆行列を持っている。英語ではan invertible matrix。
- 単位行列
- 対角行列の内のひとつ。行列の成分の主対角線上、つまり\( a_{11} \)から\( a_{nn} \)にかけて1が並び、その他の成分が0であるような正方行列のこと。\( I \)で表す。次元数は\( I_n \)のnに数を代入して表す。英語ではan identity matrixと呼ばれている。
- \[ I_n = \begin{pmatrix} 1 & 0 & 0 & 0 & \cdots & 0 \\ 0 & 1 & 0 & 0 & \cdots & 0 \\ 0 & 0 & 1 & 0 & \cdots & 0 \\ 0 & 0 & 0 & 1 & \cdots & 0 \\ \vdots & \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & 0 & \cdots & 1 \end{pmatrix} \]
- 単位行列は行列同士の非可換性の乗法における単位元に当たる行列。
- 正則行列にその逆行列を掛けると単位行列が得られ、この場合に限って交換法則が成り立つことから、逆行列の検算に用いることができる。正則行列をAとし、Aの逆行列を\( A^{-1} \)とし、単位行列を\( I \)とすると次の関係が成り立つ。
- \[ A A^{-1} = A^{-1} A = I \]
- 余因子
- 正方行列の成分をラプラス展開して得られた小行列式\( M_{ij} \)に1または-1のいずれかを規則に従って掛けたもの。英語ではa cofactor。
- 1を掛けるか-1を掛けるかは\( (-1)^{i+j} \)によって定まる。iは列番号、jは行番号。1を掛けても小行列式の正負の符号はそのままだが、-1を掛けると小行列式の正負の符号が反転することに注目。
- 余因子は、Aを正方行列だとすると、\( cof\ A \)やcof(A)、またはCと表記されることがある。
- \[ \begin{align} cof\ A = C = (-1)^{i + j} M_ij \end{align} \]
- 余因子行列
- 2つの意味がある。1つは正方行列の各成分をその余因子(小行列式に1か-1を掛けたもの)によって置き換えた行列のこと。これは英語でa cofactor matrixと呼ばれているもの。もう1つの意味はa cofactor matrixを転置した行列のこと。転置は英語でtranspose。転置後の余因子行列は英語ではan adjugate matrixと呼ばれている。
- An adjugate matrixはa classical adjoint matrixとも呼ばれていることがある。数式処理システムのMaxiamではこの意味で函数名としてadjointという呼び名が使われている。
- 転置した後の余因子行列の各成分を元の正方行列の行列式で割ると逆行列が得られる。転置前の余因子行列は\( cof\ A \)やcof(A)、または\( C \)と記すことができ、転置後の余因子行列は\( adj\ A \)やadj(A)、または\( C^T \)と記すことができる。
- 例えば、2次の正方行列の余因子行列は次のようになる。
- \[ \begin{align} cof \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix} &= C_2 \\ &= \begin{pmatrix} a_{22} & a_{21} \\ a_{12} & a_{11} \end{pmatrix} \circ \begin{pmatrix} 1 & -1 \\ -1 & 1 \end{pmatrix} \\ &= \begin{pmatrix} 1 \cdot a_{22} & -1 \cdot a_{21} \\ -1 \cdot a_{12} & 1 \cdot a_{11} \end{pmatrix} \\ &= \begin{pmatrix} a_{22} & -a_{21} \\ -a_{12} & a_{11} \end{pmatrix} \end{align} \]
- 小行列式からなる行列から余因子の行列を求める場合、小行列の行列の各成分と1と-1とがチェッカー・フラック状に並ぶ行列の各成分とを成分ごとにスカラー倍するアダマール積を用いることができる。アダマール積の演算子は\( \circ \)か\( \odot \)。
- これを転置すると次のようになる。
- \[ adj \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix} = C^T_2 = \begin{pmatrix} a_{22} & -a_{12} \\ -a_{21} & a_{11} \end{pmatrix} \]
- 転置された余因子行列は、数式処理システムMaximaではadjoint()函数で得られ、GNU OctaveとJuliaではAが正方行列の場合にdet(A) * inv(A)という式で得られるが、Juliaではdet()函数を使うためにusing LinearAlgebraの指定が必要。R言語ではadjoint()函数を用いることができるが、そのためにはmatlibというパッケージが必要になる。
- det(A) * inv(A)により、転置された余因子行列がなぜ得られるかは、逆行列を導く演算の逆演算だと考えればいいかもしれない。
- 小行列
- ラプラス展開(別名:余因子展開)の手続きの途中で得られる行列の中の部分行列のこと。
- 小行列式
- 小行列の行列式。英語ではa minor。ラプラス展開の過程で生ずる部分行列の行列式。
- Maximaで小行列式を求めるには例えばminor(A,1,1)函数を利用できる。第1引数のAは行列、第2引数の1は列番号、第3引数の1は行番号。この例ではAという正方行列の\( a_{11} \)の小行列式を求めている。
- 行列同士の除法
- 行列同士の除法は未定義とされることがあるが、特定の条件の下では成り立つ。除算行列に逆行列があれば、つまり除算行列が正則行列であるならばその除算行列を逆行列に変換し、逆行列の乗法に直して計算することができる。
- \[ A \div B = A \cdot B^{-1} \]
コメント
コメントを投稿