しゅみぷろ

プログラミングとか

行列の性質について

はじめに

 

esprog.hatenablog.com

 


こちらの記事で、頂点の法線をModelSpaceからViewSpaceに変換する際に

法線の拡大縮小変換は、この変換の逆数をとる必要があるので $$A=R_{V} S_{M} ~ ^{-1} R_{M}$$ となります。回転行列の転置行列は自身の逆行列と等しくなることと、拡大縮小行列の転置行列は自身と等しくなることから $$A=(R_{V} ~ ^{-1})^T (S_{M} ~ ^{-1})^T (R_{M} ~ ^{-1})^T$$ です。行列の転置は纏めることができるので $$A=(R_{M} ~ ^{-1} S_{M} ~ ^{-1} R_{V} ~ ^{-1})^T$$ となります(演算順は変わります)。そして、同様に逆行列も纏めることができるので $$A=((R_{V} S_{M} R_{M})^{-1}) ~ ^T$$ となります(演算順が変わり、元の順に戻ります)。 つまり、法線をModelSpaceからViewSpaceに変換するには、MV変換行列の左上3x3成分に関して逆行列を求め、転置した行列で変換を行えば良いことになります。

といった記述をしました。行列は、その性質を知ることで様々な情報を取得することができるようになります。

なので今回は、行列の性質について見ていきます。

行列についてはこちらも参考になると思います。

対角行列

行列の行を$i$、列を$j$で表した時、$i=j$であるような行列の要素を対角要素といいます。

この対角要素以外の要素がすべて$0$であるような正方行列を対角行列と言います。

$$ A = \left( \begin{array}{cccc} a_{11} & 0 & \ldots & 0 \\ 0 & a_{22} & \ldots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \ldots & a_{nn} \end{array} \right) $$

ちなみに対角要素がすべて$1$の対角行列が単位ベクトルです。

対角行列は行列の転置によって変化することはありません。 $$A^{T}=A$$

転置行列

行列$A$において、$i$行$j$列の要素$a_{ij}$と$j$行$i$列の要素$a_{ji}$を入れ替えた行列を転置行列といい $$A^{T}$$ で表します。

先程の対角行列のときにも書きましたが、行列$A$が対角行列であれば $$A^{T}=A$$ です。

また、転置行列に対する転置を行うと、元の行列を得ることができます。 $$(A^{T})^{T}=A$$

さらに、2つの行列の積について $$(AB)^{T}=B^{T}A^{T}$$ です(演算の順序が入れ替わることに注意)。

行列式

正方行列についてのみ求めることができます。行列式では、行列を数式とみなしてスカラー値を得ることができます。行列$A$の行列式は $$\mathrm{det}A ~~~~~~ または ~~~~~~ |A|$$ で表します。

行列式は、行列$A$、$B$、単位行列$E$について以下の様な性質があります。

  • 2つの行(または列)を交換すると正負が反転する
  • 行列のある行(または列)を定数倍すると行列式も同じ定数倍になる
  • $|E|=1$
  • $|A^{T}|=|A|$
  • $|A^{-1}|=\frac{1}{|A|}=|A|^{-1}$
  • $|A||B|=|AB|$

余因子展開による行列式を求めることができます。$i$行$j$列の要素を$a_{ij}$とする$n$次元行列$A$から、$i$行$j$列を取り除いた$(n-1)$次元行列を小行列と呼び、$C_{ij}$と表します。余因子は少行列に符号をつけたもので、余因子$\Delta$は $$\Delta_{ij}=(-1)^{i+j}C_{ij}$$ で表され、行列式は $$ \begin{eqnarray} |A|&=\sum_{i=1}^{n}a_{ij}\Delta_{ij}\\ &=\sum_{j=1}^{n}a_{ij}\Delta_{ij} \end{eqnarray} $$ となります。

逆行列

正方行列についてのみ求めることができます。逆行列は $$A^{-1}$$ で表し $$AA^{-1}=A^{-1}A=E$$ を満たします。

また、単位行列では $$E^{-1}=E$$ です。

すべて$0$が入っている行や列を含む行列は、どんな行列を乗算しても単位行列に必要な対角要素$1$を作れないので、逆行列は存在しません。逆行列が存在する行列を逆行列といいます。

逆行列は以下のような性質を持ちます。

$$(A^{-1})^{-1}=A$$ $$(AB)^{-1}=B^{-1}A^{-1}$$ $$(A^{T})^{-1}=(A^{-1})^{T}$$

逆行列の要素$\bar{a}_{ij}$は行列式と余因子を用いて $$\bar{a}_{ij}=\frac{\Delta_{ij}}{|A|}$$ で求めることができます。

よって逆行列

$$ A^{-1} = \frac{1}{|A|}\left( \begin{array}{cccc} \Delta_{11} & \Delta_{12} & \ldots & \Delta_{1n} \\ \Delta_{21} & \Delta_{22} & \ldots & \Delta_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ \Delta_{n1} & \Delta_{n2} & \ldots & \Delta_{nn} \end{array} \right) $$

となります。

直交行列

正方行列$A$と転置行列$A^{T}$の積が$E$になるとき、$A$を直交行列といいます。 $$A^{T}A=AA^{T}=E$$ 直交行列は $$A^{T}=A^{-1}$$ という性質を持ちます。さらに、行列式の性質から $$|A^{T}A|=|A^{T}||A|=|A||A|=|A^{2}|$$ であり、直交行列の性質と単位行列行列式は1であることから $$|A^{T}A|=|E|=1$$ なので、これらを組み合わせて $$|A^{T}A|=|A^{2}|=1$$

となります。

また、直交行列では行列式は$1$か$-1$になります。行列式が$1$になる直交行列を特殊直交行列といいます。 特殊直交行列はどの行も、どの列も正規化したベクトルとして扱うことができます(ノルムが1です)。この各行、各列同士のベクトルは互いに垂直です。 この各行、各列のベクトルは正規直交基底と呼ばれます。

f:id:es_program:20160426010214p:plain

きんいろモザイク」よりカレンちゃんの正規(?)直交基底のポーズ(正式名称ではありません。完全にネタです。)

変換行列から情報の抽出

Model変換行列を例に、行列の性質を利用した情報の抽出を見ていきます。Model変換行列は以下になります。

$$ \begin{eqnarray} M=TRS&=&\left( \begin{array}{cccc} 1 & 0 & 0 & t_{x} \\ 0 & 1 & 0 & t_{y} \\ 0 & 0 & 1 & t_{z} \\ 0 & 0 & 0 & 1 \end{array} \right)\left( \begin{array}{cccc} R_{11} & R_{12} & R_{13} & 0 \\ R_{21} & R_{22} & R_{23} & 0 \\ R_{31} & R_{32} & R_{33} & 0 \\ 0 & 0 & 0 & 1 \end{array} \right)\left( \begin{array}{cccc} S_{x} & 0 & 0 & 0 \\ 0 & S_{y} & 0 & 0 \\ 0 & 0 & S_{z} & 0 \\ 0 & 0 & 0 & 1 \end{array} \right)\\ &=&\left( \begin{array}{cccc} S_{x}R_{11} & S_{y}R_{12} & S_{z}R_{13} & t_{x} \\ S_{x}R_{21} & S_{y}R_{22} & S_{z}R_{23} & t_{y} \\ S_{x}R_{31} & S_{y}R_{32} & S_{z}R_{33} & t_{z} \\ 0 & 0 & 0 & 1 \end{array} \right) \end{eqnarray} $$

T(平行移動)成分を抽出

これは簡単で、 $$m_{14}=t_{x},m_{24}=t_{y},m_{34}=t_{z}$$ として抽出できます。

S(スケール)成分を抽出

Model変換行列の$r$(列)ベクトルに注目します。 $$r_{x}=(S_{x}R_{11},S_{x}R_{21},S_{x}R_{31})$$ より、このベクトル$r_{x}$のノルムをとると $$|r_{x}|=\sqrt{S_{x}^2R_{11}^2+S_{x}^2R_{21}^2+S_{x}^2R_{31}^2}$$ 両辺を2乗して $$ \begin{eqnarray} |r_{x}|^2 &=& S_{x}^2R_{11}^2+S_{x}^2R_{21}^2+S_{x}^2R_{31}^2\\ &=& S_{x}^2(R_{11}^2 + R_{21}^2 + R_{31}^2) \end{eqnarray} $$ ここで、回転行列$R$は特殊直交行列なので $$R_{11}^2 + R_{21}^2 + R_{31}^2=1$$ になるため $$S_{x}=|r_{x}|$$ となります。。$y$、$z$成分も同様で $$S_{y}=|r_{y}|$$ $$S_{z}=|r_{z}|$$ です。

R(回転)成分を抽出

Model変換行列から上記で求めたTS成分を除くことでR成分を得ることができます。