1-4 行列其の壱


 

整数は神によってつくられた

他は人間がつくったものだ

レオポルト・クロネッカー(数学者)





1.行列ってなんじゃ

 行列(matrix)というのはこんなやつです。

(図1-4.1)

横の並びを行、縦の並びを列といい、行数m, 列数nの行列をm行n列行列とかm×n行列と呼びます。
(図1-4.1)は3×4行列です。n次元ベクトルは、1×n(またはn×1)行列といえます(正しい解釈かは知らんが)。
行数と列数が等しい行列(n行n列)を、(n次)正方行列と呼び、3Dプログラムでは、主に正方行列を扱います。
数学書では行と列は1から数える場合が多いようですが、うちでは0から数えることにします。

行列を構成するaijを行列の成分(要素、元素ともいう)といい、
正方行列のi=jである成分(a00, a11など)を対角成分といいます。
行列Aを、

A = (aij)

と表記することもあります。

行列の行(列)をベクトルとみて、それを行ベクトル(列ベクトル)といったりもします。
要素を並べるのが面倒なときは、列ベクトルまたは行ベクトルを用いて

(式1-4.1)

という表記方法を使用することにします。行ベクトルは添え字の頭にcを、列ベクトルはrをつけることにします。
なお、この表記方法はうちが勝手にやっているもので、正式な(?)ものではありません。

さてこの行列。3Dプログラムにいったいなんの役に立つのかという疑問は窓から投げ捨てて、
しばらくは基本的な演算を説明していきます。


2.行列とスカラーの乗除算 & 行列と行列の加減算

 行列とスカラーの乗除算および行列と行列の加減算は、
AとBをm×n行列、kをスカラーとして、次のように定義されます。

(式1-4.2)

よーするに行ベクトル(列ベクトル)とスカラーの乗除算、
行ベクトル(列ベクトル)同士の加減算です。


3.行列同士の乗算

 m×l行列Aとl×n行列Bの積は、次のように定義されます。

(式1-4.3)

記号・はベクトルの内積1-3.1です。
Aは列ベクトルを、Bは行ベクトルを用いて書いていることに気をつけてください。
Aの行数mとBの行数nが一致していなければ行列の積は定義されません。
(1-4.3)では、AとB両方とも3×3行列としています。
m×l行列とl×n行列の積は、m×n行列になります。


 対角成分が1で、その他の成分が0である行列を(n次)単位行列といい、Eで表します。
行列AとEの積は(積が定義できれば)

AE = EA = A

となります。


 1-4.1でn次元ベクトルは1×n行列またはn×1行列とみなせると書きました。
というわけで3次元ベクトルVと3×3行列Aの乗算は、

(式1-4.4)

となります。1番目の形式はAを列ベクトルで、2番目の形式はAを行ベクトルで表記しています。
2番目の形式の最後は列ベクトルで書くべきなんですが、見比べるために行ベクトルにしときました。
では見比べてみましょう。どちらも3次元ベクトルですが、異なる値になっていますね。
行列の乗算では、交換法則は一般には成り立ちません。AB≠BAということです。

さてここで転置行列なるものに登場していただきます。
Aの転置行列ATは、

(式1-4.5)

となります。行と列を入れ替えただけです。添え字のcとrに注意してください。

では、転置行列とベクトルの積をみてみましょう。

(式1-4.6)

こいつと(式1-4.4上)を見比べてみるとあら不思議。同じ結果になってます。
行ベクトルと列ベクトルの違いを無視すれば、vA = ATvといえます。
一般に行列の積の転置では

(AB)T = BTAT

となってたりします。順番が入れ替わっていることに注意してください。
ベクトルvと行列Aの積のでいうと、vを行ベクトルと見たものをvr、列ベクトルと見たものをvcとすると、
vc = vrTとなり、

(vrA)T = ATvrT

であるということです。


 3Dプログラムでは、普通(多分)はベクトル・行列と行列・ベクトルの
どちらか一方のみを用いるようにします。行列を右から掛ける派と左から掛ける派です。
書籍などでは左から掛ける派(行列・ベクトル)が多いようですが、うちは右から掛ける派とします。
ちなみにDirect3Dは右から掛ける派で、OpenGLは左から掛ける派のようです。


 行列の積では交換法則は成り立ちませんが、結合法則と分配法則

(式1-4.7)

は成り立ちます。これは非常に重要なんで忘れないように。
ベクトルv, 行列AとBでも、

(vA)B = v(AB)

となります。


 ベクトルの外積A×Bは、行列を用いて次のように表すことが出来ます。
(1-3.2で触れた行列式のことではありません)
ベクトルBに対して次のような行列B*を定義します。

(式1-4.8)

ベクトルAと行列B*の積を計算してみると、



となります。(見やすくするため、列ベクトルで表記しています)
外積を行列として扱うと便利なことがありますので覚えておきましょう。


目次に戻る
行列其の弐