今回は行列式(determinant)なるものをやります。ベクトルの外積(
1-3.2)でもちょっと触れたやつです。
最初に行列式のための下準備をします。まず3つの数からなる順列(012)を考えましょう。
こいつを並べ替えると、
(012), (021), (201), (210), (120), (102)
という6通りの順列が出来ます。
一般に0から(n-1)までのn個の数からなる順列(012…n-1)を考え、これを並べ替えて得られる順列を
σ
kと書くことにし、σ
kのi番目の数をσ
k(i)で表すことにします。
具体的には、
σ0 = (012) { σ0(0) = 0, σ0(1) = 1, σ0(2)
= 2 }
σ1 = (021) { σ1(0) = 0, σ1(1) = 2, σ1(2) = 1 }
σ2 = (201) { 省略 }
…
という感じです。kと順列は一意に対応させますが、具体的にどのkがどの順列に対応するかは
任意に決めてかまいません。上の例でσ
0 = (021)、σ
1 = (012)としても良いということです。
なお、n個の数からなる順列の並べ替えは、n!通りあります。
(012…n-1)から初めて、任意の2つの数を入れ替える操作を繰り返してある順列をつくるとします。
この操作は一意ではありませんが、入れ替えの回数が奇数であるか偶数であるかは一定であることが知られています。
例えば(012)から(021)をつくるには、必ず奇数回の入れ替えが必要になるといった具合です。
奇数回の入れ替えで得られる順列を奇順列、偶数回のものを偶順列とよび、順列σにより符号を定める関数sgn(σ)を
sgn(σ) = ( σ == 奇順列 ) ? -1 : 1;
と定義しましょう。
これらを用いて、n次正方行列A = (a
ij)の行列式|A|( det(A)とも書く )を次のように定義します。

(式1-5.1)
帰らないでね♥
…まずはわけのわからん記号(, Π)なんですが、プログラムで書けばなんてことはありません。
forループで狽ヘ足し算を、Πは掛け算を行うだけです。(式1-5.1)をCちっくにかくとこんな感じです。

(コード1-5.1)
"sigma(k,m)とsgn(k)は行列の次数Nが分からんと実装できんだろっ"とかいう突っ込みは無視します。
(コード1-5.1)はあくまでも(, Π)の説明用なんで、間違っても真似しないように。
さて実際に3次正方行列の行列式を求めてみましょう。まずは順列σ
kを
σ0 = (012), (+)
σ1 = (021), (-)
σ2 = (120), (+)
σ3 = (102), (-)
σ4
= (201), (+)
σ5
= (210), (-)
とします。(+)(-)というのは、sgn(σ
k)の正負です。
こいつを(式1-5.1)に当てはめてやると、行列Aの行列式|A|は

(式1-5.2)
となります。
上の計算を眺めていると、次のような規則性に気づくかもしれません。わたしゃいわれなきゃ気づかんけどね。

(図1-5.1)
まず線でつながれた成分(線1本あたり3つ)を掛け合わせ、青い線のものはさらに-1を掛けます。
これらを全て足し合わせると|A|と等しくなります。
これは"たすきがけの法則"とか呼ばれるもので、2次と3次の行列式はこの方法で求まります。
ただし、たすきがけの法則は4次以上の行列式には適用できません。そして残念ながら3Dプログラムでは
主に4次正方行列を使います。次でもうちょっと簡単にしますが。
最後に大事なことを。行列式の積について、次が成り立ちます。
また、単位行列Eの行列式は
となります。覚えといてね。
次は行列式の展開です。
ここで行列式の展開なるものをやるのは、実は余因子(cofactor)というやつの説明が主目的だったりします。
この余因子というのは、後で説明する逆行列を求めるのに使います。
"行列式などもうたくさんだ"という方ももうちょっと我慢してください。
行列式自体もここで1.より簡単な形にしますんで。
では3次の行列式(式1-5.2)を見てみましょう。
こいつを0行の要素(a
00, a
01, a
02)について整理すると、

(式1-5.3)
となります。これを行列式|A|の0行についての展開式といいます。
i行についての展開式、j列についての展開式も同様にして得られます。
(式1-5.3)でa
00に掛かっている行列式を見ると、Aから0行と0列を除いて作られる
行列の行列式となっているのが分かります。a
01, a
02についても同様です。
これを行列式|A|の小行列式といいます。一般にいうと
行列Aからi行の成分とj行の成分を除いた行列式を、
行列式D = |A|の小行列式という。
|
となります。i行j列を除いた小行列式をD
ijと表記することにすると、
(式1-5.3)は小行列式を用いて

(式1-5.4)
とすっきり表記できます。
まだ符合がじゃまくさいんでこいつも消しましょう。ここで余因子の登場です。
余因子というのは、小行列式D
ijに(-1)
i+jを掛けたもので、
となります。余因子を用いると、(式1-5.4)は

(式1-5.5)
とかけます。ぉぉすっきり。
4次以上の行列についても同様です。で、4次行列式の場合小行列式は3次になるので、
小行列式はたすき掛けで求められます。5次以上が必要になった場合でも小行列式をさらに展開すればおっけーです。
…やっぱめんどくせーか。
ようやく逆行列。まず逆行列とはなんぞやねん。
n次正方行列Aに対して、
AB = BA = E(n次単位行列)
となるようなn次正方行列Bが存在するとき、BをAの逆行列といい、
A-1 = Bで表す。
|
これが逆行列です。逆行列はスカラーでいう逆数に相当します。例えば
AB = C
の両辺に右からB
-1を掛けてやると、
ABB-1
= AE
= A
= CB-1
となります。
任意の正方行列に対して逆行列が存在するわけではありません。
例えば全ての要素が0である行列(零行列という)は明らかに逆行列をもちません。
逆行列をもつ行列を、正則行列といいます。
さてここで定理。
正方行列Aが正則行列であるための必要十分条件は、
|A| ≠ 0
である。( |A|≠0 ⇔ Aは正則行列 )
|
こいつを証明してみましょう。(逆行列の計算方法だけ分かればいいという方は
読み飛ばしてください)
まず<=の証明。
Aが正則であると仮定する。このとき逆行列A
-1が存在し、
AA-1 = E
両辺の行列式を求めると、
|AA-1| = |E|
|A||A-1| = 1
したがって
|A| ≠ 0
である。
次に⇒の証明。
|A|≠0と仮定する。
(式1-5.6)を行列A = (a
ij)を用いて

(式1-5.8)
と表記する。ただしc
0, c
1, c
2は任意の数とする。
|A|≠0と仮定しているので、この解はクラメールの公式により(式1-5.7)で与えられる。
ここで(式1-5.7)を未知数c
0, c
1, c
2に関する連立方程式とみると、クラメールの公式により

(式1-5.9)
が得られる。(余因子A
jiの添え字の順番に注意してください)
(式1-5.9)を(式1-5.8)に代入すると、

(式1-5.10)
が得られる。
c
0, c
1, c
2は任意の数としているので、(式1-5.10)が成り立つには
AB = E
でなければならない。したがってB = A
-1であり、Aは正則行列である。
(証明終わり)
正則行列Aの逆行列A-1は上の証明で出てきたBなんで、

(式1-5.11)
で求められます。A
jiは余因数です。添え字の順番に注意してください。
3次以外についても同様です。
逆行列の性質を最後に1つ。
AとBを正則行列とすると、
(AB)(B-1A-1) = A(BB-1)A-1 = AA-1 = E
逆も同様。
|
これは(B
-1A
-1)が(AB)の逆行列であることを、すなわち
を示しています。順番に注意して覚えましょう。