【行列】って何に使うの?「アフィン変換」編 〜行列の積はなぜ複雑なのか〜

【行列】って何に使うの?〜「アフィン変換」編大学数学

前回の記事では、行列の計算について解説しました。

今回は「アフィン変換」を題材に、「行列の積」についてより深く考察してみようと思います。


「なんで行列の積ってあんなめんどくさい定義にしてるの?」という答えは第3章の後半で説明しています。


スポンサーリンク

1. 行列の積(再掲)

行列の積については、前回解説しました。


今回は行列の積が非常に重要になってくるので、念の為もう一度、行列の積についてまとめておきます。

より詳しい内容を知りたい人は上の記事を読んでくださいね!


行列の積

\(A\)を\(l\times m\)行列、\(B\)を\(m\times n\)行列とする。

\(A\)の第\(i\)行を左から、\(B\)の第\(j\)列を上から数えたときに、対応する成分の積を\(m\)個加えて得られる数を\(c_{ij}\)としたとき、第\((i,j)\)成分を\(c_{ij}\)とする\(l\times n\)行列\(C\)を\(A\)と\(B\)のといい、\(C=AB\)で表す。

行列の積

スポンサーリンク

2. 線形変換

まずは「線形変換」(一次変換)について考えます。


線形変換の定義

線形変換の定義は次のようになります。


線形変換

任意の変換\(f\)と、任意の\(n\)次元ベクトル\({\bf x}\), \({\bf y}\) および定数\(c\)に対して、次の2つの関係式が成り立つとき、\(T\)は線形変換であるという:
\begin{cases}
f({\bf x} + {\bf y})=f({\bf x})+f({\bf y}) \\
f(c {\bf x})=cf({\bf x})
\end{cases}


ここで前回解説した行列の計算を思い出してください。


\(f({\bf x})=A{\bf x}\)とすれば、任意の\(n\)次元ベクトル\({\bf x}\), \({\bf y}\) および定数\(c\)に対して、

\begin{cases}
A({\bf x} + {\bf y})=A({\bf x})+A({\bf y}) \\
A(c {\bf x})=cA({\bf x})
\end{cases}

が成り立つことがすぐにわかると思います。


つまり、次のことが成り立ちます。


\(A\)を定数行列とする。

ベクトル\(\bf x\)を、ベクトル\(A{\bf x}\)に移す変換\(f\)は線形変換である:

$$f({\bf x})=A{\bf x}$$


上の定理を利用して、線形変換の例を見ていきましょう!


線形変換の例

簡単のため、ここからの例は全て平面で考えます。


拡大・縮小

ベクトル\({\bf x}=\left( \begin{array}{c} x \\ y \end{array} \right)\)を、\(x\)軸方向に\(a\)倍、\(y\)軸方向に\(b\)倍する変換\(f\)は線形変換である:

$$f({\bf x})=f\left( \begin{array}{c} x \\ y \end{array} \right)=\left( \begin{array}{c} ax \\ by \end{array} \right)$$


拡大・縮小


(理由)

行列\(A\)を、\(A=\left( \begin{array}{cc} a & 0 \\ 0 & b \end{array} \right) \)とすれば、

$$A{\bf x}=\left( \begin{array}{cc} a & 0 \\ 0 & b \end{array} \right) \left( \begin{array}{c} x \\ y \end{array} \right) =\left( \begin{array}{c} ax \\ by \end{array} \right)$$

となるので、\(f({\bf x})=A{\bf x}\)が成り立つから。

右辺はベクトル\({\bf x}\)を、\(x\)軸方向に\(a\)倍、\(y\)軸方向に\(b\)倍したベクトルになっているね!


折り返し(反転)

ベクトル\({\bf x}=\left( \begin{array}{c} x \\ y \end{array} \right)\)を、\(x\)軸に関して折り返す変換\(f\)は線形変換である:

$$f({\bf x})=f\left( \begin{array}{c} x \\ y \end{array} \right)=\left( \begin{array}{c} x \\ -y \end{array} \right)$$


折り返し(反転)


(理由)

行列\(A\)を、\(A=\left( \begin{array}{cc} 1 & 0 \\ 0 & -1 \end{array} \right) \)とすれば、

$$A{\bf x}=\left( \begin{array}{cc} 1 & 0 \\ 0 & -1 \end{array} \right) \left( \begin{array}{c} x \\ y \end{array} \right) =\left( \begin{array}{c} x \\ -y \end{array} \right)$$

となるので、\(f({\bf x})=A{\bf x}\)が成り立つから。


\(y\)軸に関する折り返しも線形変換になるよ!

行列\(A\)をどう定めればいいかな?


回転

任意のベクトル\({\bf x}=\left( \begin{array}{c} x \\ y \end{array} \right)\)は、極形式を用いて、

$${\bf x}=\left( \begin{array}{c} r\cos{\alpha} \\ r\sin{\alpha} \end{array} \right)$$

と表せる。


ベクトル\({\bf x}=\left( \begin{array}{c} r\cos{\alpha} \\ r\sin{\alpha} \end{array} \right)\)を、原点\(O\)を中心に\(\theta\)だけ回転させる変換\(f\)は線形変換である:

$$f({\bf x})=f\left( \begin{array}{c} r\cos{\alpha} \\ r\sin{\alpha} \end{array} \right)=\left( \begin{array}{c} r\cos{(\alpha+\theta)} \\ r\sin{(\alpha+\theta)} \end{array} \right)$$


回転


(理由)

行列\(A\)を、\(A=\left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{array} \right) \)とすれば、

\(\displaystyle \hspace{2em} A{\bf x}= \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{array} \right) \left( \begin{array}{c} r\cos{\alpha} \\ r\sin{\alpha} \end{array} \right)\)

\(\displaystyle \hspace{3.5em} =\left( \begin{array}{c} r\cos{\alpha}\cos{\theta}-r\sin{\alpha}\sin{\theta} \\ r\cos{\alpha}\sin{\theta}+r\sin{\alpha}\cos{\theta} \end{array} \right)\)

\(\displaystyle \hspace{3.5em} =\left( \begin{array}{c} r\cos{(\alpha+\theta)} \\ r\sin{(\alpha+\theta)} \end{array} \right)\)

となるので、\(f({\bf x})=A{\bf x}\)が成り立つから。

加法定理を使っているよ!




このように、2次の線形変換と2次正方行列\(A\)は1対1に対応しています。

もちろん、3次、4次、\(n\)次についても同様です。


すなわち、あらゆる合同変換は行列の積によって表現することができるのです。


線形変換ではない例

平行移動

ベクトル\({\bf x}=\left( \begin{array}{c} x \\ y \end{array} \right)\)を、\(x\)軸方向に\(p\)、\(y\)軸方向に\(q\)倍だけ平行移動させる変換\(g\)は線形変換ではない:

$$g({\bf x})=g\left( \begin{array}{c} x \\ y \end{array} \right)=\left( \begin{array}{c} x+p \\ y+q \end{array} \right)$$


平行移動


(理由)

\(f\)が線形変換ならば、定義から、

$$f({\bf x} + {\bf y})=f({\bf x})+f({\bf y})$$

が成り立ちます。


\({\bf x}={\bf y}={\bf 0}\)(ゼロ・ベクトル)とすると、

$$f({\bf 0}+{\bf 0})=f({\bf 0})+f({\bf 0})$$

左辺において、\({\bf 0}+{\bf 0}={\bf 0}\)より、

$$f({\bf 0})=f({\bf 0})+f({\bf 0})$$

よって、\(f({\bf 0})={\bf 0}\)が成り立ちます。


つまり、\(f({\bf 0})={\bf 0}\)は線型変換であるための必要条件になります。


しかし、今回の変換\(g\)は、

$$g({\bf x})=g\left( \begin{array}{c} x \\ y \end{array} \right)=\left( \begin{array}{c} x+p \\ y+q \end{array} \right)$$

より、

$$g({\bf 0})=g\left( \begin{array}{c} 0 \\ 0 \end{array} \right)=\left( \begin{array}{c} 0+p \\ 0+q \end{array} \right)=\left( \begin{array}{c} p \\ q \end{array} \right) \neq {\bf 0}$$

となるので、\(g\)は線型変換ではありません。


3. アフィン変換

第2章で、拡大・縮小、折り返し、回転は線形変換であることがわかりました。

しかし、平行移動は線形変換ではありませんでした。


つまり、2次元での平行移動は2次正方行列の積によって表すことができません。


え、じゃあ行列の積って使えなくない、、、?

と思うかもしれませんが、実はそんなことはありません。


どういうことかというと、3次元で考えると、平面での平行移動を行列の積で表現することができます。


平行移動と線形変換

実際に、ベクトル\({\bf x}=\left( \begin{array}{c} x \\ y \end{array} \right)\)を\(x\)軸方向に\(p\)、\(y\)軸方向に\(q\)だけ平行移動させる変換\(g\)を考えます。


ここで、次元を1つ上げた3次元ベクトル\({\bf \hat{x}}=\left( \begin{array}{c} x \\ y \\ 1 \end{array} \right)\)を用意します。


このベクトル\(\bf\hat{x}\)に、行列\(\hat{A_0}=\left( \begin{array}{ccc} 1 & 0 & p \\ 0 & 1 & q \\ 0 & 0 & 1 \end{array} \right) \)を左からかけてみます。


すると、

$$\hat{A_0}{\hat{\bf x}}=\left( \begin{array}{ccc} 1 & 0 & p \\ 0 & 1 & q \\ 0 & 0 & 1 \end{array} \right) \left( \begin{array}{c} x \\ y \\ 1 \end{array} \right) = \left( \begin{array}{c} x+p \\ y+q \\ 1 \end{array} \right)$$

となります。


見てわかるように、\(\hat{A_0}{\hat{\bf x}}\)の第1,2成分をみれば、平行移動の変換\(g\)を表すことができました。


結論として、2次元での平行移動は、3次元上では線形変換になるということです。

空間内の平面\(z=1\)で考えれば線形変換になるんだね!


平行移動


2次元上の線形変換と3次元上の線形変換

もちろん、第2章で扱った線形変換は、3次元上でも線形変換になります。


例えば、ベクトル\({\bf x}=\left( \begin{array}{c} x \\ y \end{array} \right)\)を、\(x\)軸方向に\(a\)倍、\(y\)軸方向に\(q\)倍する変換\(f\)は、行列\(A\)を

$$A=\left( \begin{array}{ccc} a & 0 & 0 \\ 0 & b & 0 \\ 0 & 0 & 1 \end{array} \right)$$

と定めることで、

$$A{\hat{\bf x}}=\left( \begin{array}{ccc} a & 0 & 0 \\ 0 & b & 0 \\ 0 & 0 & 1 \end{array} \right) \left( \begin{array}{c} x \\ y \\ 1 \end{array} \right) = \left( \begin{array}{c} ax \\ by \\ 1 \end{array} \right)$$

となり、変換\(f\)を表現できます。


線型写像の合成とアフィン変換

では次に、ベクトル\({\bf x}=\left( \begin{array}{c} x \\ y \end{array} \right)\)を\(x\)軸方向に\(a\)倍、\(y\)軸方向に\(q\)倍した後に、\(x\)軸方向に\(p\)、\(y\)軸方向に\(q\)だけ平行移動させる変換\(g\circ f\)を考えます。


これは、ベクトル\({\bf \hat{x}}=\left( \begin{array}{c} x \\ y \\ 1 \end{array} \right)\)に行列\(A=\left( \begin{array}{ccc} a & 0 & 0 \\ 0 & b & 0 \\ 0 & 0 & 1 \end{array} \right)\)を左からかけた後に行列\(\hat{A_0}=\left( \begin{array}{ccc} 1 & 0 & p \\ 0 & 1 & q \\ 0 & 0 & 1 \end{array} \right) \)を左からかければ良いですよね?


つまり、\((g\circ f)({\bf{x}})=\hat{A_0}A{\bf{x}}\)となるので、変換\(g\circ f\)は\(\hat{A_0}A\)に対応していることがわかります。


ここで、\(\hat{A}=\hat{A_0}A\)とすると、\(\hat{A}\)はどのような行列になるのでしょうか?


実際に計算してみると、

\(\hspace{4em}\hat{A}=\hat{A_0}A\)

\(\hspace{5em}=\left( \begin{array}{ccc} 1 & 0 & p \\ 0 & 1 & q \\ 0 & 0 & 1 \end{array} \right) \left( \begin{array}{ccc} a & 0 & 0 \\ 0 & b & 0 \\ 0 & 0 & 1 \end{array} \right)\)

\(\hspace{5em}=\left( \begin{array}{ccc} a & 0 & p \\ 0 & b & q \\ 0 & 0 & 1 \end{array} \right)\)

となります。


見てわかるように、\(\hat{A}=\hat{A_0}A\)の左上\(2\times 2\)の部分は線形変換\(f\)(拡大・縮小)に、右の\(2\times 1\)の部分は平行移動\(g\)に対応していることがわかると思います。

綺麗に区画分けされているね!


拡大・縮小以外の線形変換(例えば、回転や折り返し)についても同じことが成り立ちます。

アフィン変換


例えば、\(\theta\)回転してから平行移動させたいなら、

$$\hat{A}=\left( \begin{array}{ccc} \cos{\theta} & -\sin{\theta} & p \\ \sin{\theta} & \cos{\theta} & q \\ 0 & 0 & 1 \end{array} \right)$$

を\(\hat{x}\)に左からかければ良いということになります。



このように、線形変換平行移動を合成した変換のことをアフィン変換と言います。


線形変換が行列\(A\)平行移動が行列\(\hat{A_0}\)によって与えられるとき、

アフィン変換は\(\hat{A}=\hat{A_0}A\)によって与えられます。


行列の積がなぜあんなにややこしい定義になっているかというと、このように線形変換の合成に対応させるためだったのです。


ちなみに、アフィン変換は幾何学の分野や、画像の処理などに応用されています。

大学数学
スポンサーリンク
OchibaAtsuoをフォローする
ますますmathが好きになる!魔法の数学ノート

コメント

タイトルとURLをコピーしました