ゆるふわブログ

プログラミング,大学の勉強,日常生活で感じたことをゆるふわに書いていけたらなと思います.技術的に拙いところがあっても温かい目で見守っていただければ幸いです.

行列と複素数 (小ネタ)

とりあえずなんでもいいから書かなきゃなぁと思ったので簡単な小ネタ.


複素数って回転拡大を表すじゃないですか.
 r(\cos\theta+i\sin\theta) って  r 倍拡大, \theta 回転を表しますね*1
ちょっと書き方を変えると  a+bi = \sqrt{a^2+b^2}\left(\frac{a}{\sqrt{a^2+b^2}}+\frac{b}{\sqrt{a^2+b^2}}i\right) という複素数 \sqrt{a^2+b^2} 倍拡大, \phi = \arctan \frac{b}{a} 回転を表します.


回転で行列といえば回転行列というのもありますね.
 \theta 回転ならば  \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix} です.
拡大はこの行列の前に拡大率をかければよいので, a+bi の表す回転拡大に対応する行列は  \sqrt{a^2+b^2}\begin{pmatrix} \cos\phi & -\sin\phi \\ \sin\phi & \cos\phi \end{pmatrix} = \begin{pmatrix} a & -b \\ b & a \end{pmatrix} となります.(というか基底を直交する  (a,b) (-b,a) に張り替えると考えた方が早い.)


逆にこの行列を  a+bi とみなせば見通しがよくなります.

例えば,線形代数で †随伴行列† ってやるじゃないですか.中二病みたいなマーク使うやつ.
複素行列  A に対して  A^† A を転置して各成分の複素共軛をとります.
これは実数行列の転置に当たる操作なんですけど,複素数バージョンの場合はなんで共軛をとるんだろうって不思議じゃないですか.(初めて習ったときそう思った)
これが各成分の複素数を対応する行列に書き換えるとわかるんです.
例えば,
 \begin{align*}
\begin{pmatrix}
  1 & i \\ i & 1
\end{pmatrix}
\end{align*}
は,対応する行列が  1 \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} i \begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix} なので,
 \begin{align*}
\begin{pmatrix}
  1 & i \\ i & 1
\end{pmatrix} &= \begin{pmatrix}
  \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} & \begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix} \\
  \begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix} & \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}
\end{pmatrix} \\
&= \begin{pmatrix}
 1 & 0 & 0 & -1 \\
 0 & 1 & 1 & 0 \\
 0 & -1 & 1 & 0 \\
 1 & 0 & 0 & 1
\end{pmatrix}
\end{align*}

こいつの転置をとると,
 \begin{align*}
\begin{pmatrix}
 1 & 0 & 0 & 1 \\
 0 & 1 & -1 & 0 \\
 0 & 1 & 1 & 0 \\
 -1 & 0 & 0 & 1
\end{pmatrix} &=  \begin{pmatrix}
  \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} & \begin{pmatrix} 0 & 1 \\ -1 & 0 \end{pmatrix} \\
  \begin{pmatrix} 0 & 1 \\ -1 & 0 \end{pmatrix} & \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}
\end{pmatrix} \\
&= \begin{pmatrix}
1 & -i \\ -i & 1
\end{pmatrix} 
\end{align*}

 \begin{pmatrix}
  1 & i \\ i & 1
\end{pmatrix}^† になってます.複素共軛は対応する行列の転置に当たるので,複素数という行列のブロックを転置して,各々の共軛を取れば全てを展開した実行列の単なる転置に当たるのです.†納得†.

あとは指数行列ですね.指数関数に行列をぶち込むっていう.
 e^x = 1+x+\frac{x^2}{2}+\cdots から類推して,
 e^A = E+A+\frac{A^2}{2}+\cdots と定義します.

例えば  e^{\begin{pmatrix} a & 0 \\ 0 & a \end{pmatrix}} = \begin{pmatrix} e^a & 0 \\ 0 & e^a \end{pmatrix} ってなります.
で, e^{\begin{pmatrix} 0 & -\theta \\ \theta & 0 \end{pmatrix}} = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix} になるんですね.定義に代入して確かめればいいんですけど,直感的に収束先を捉えたくて.そこでこの小ネタの出番です.


 1 \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} i \begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix} だったじゃないですか.それぞれ  E,\ I と表します.すると,左辺は  e^{I\theta},右辺は  E\cos\theta + I\sin\theta じゃないですか.どっかで見た事ありますよね?*2 そういう事です.

 e^{\begin{pmatrix} a & -b \\ b & a \end{pmatrix}} = e^a\begin{pmatrix} \cos b & -\sin b \\ \sin b & \cos b \end{pmatrix} もわかると思います.


ちなみに  \begin{pmatrix} 0 & \theta \\ \theta & 0 \end{pmatrix} みたいなのは複素数を拡張した分解型複素数なる "双曲線の" 複素数を考えれば納得できそうです.いつもの複素数は "円の" です. j^2=1 なる虚数単位チックな  j を導入して  a+bj とかするみたいです. j J=\begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix} に対応付ければ 2 乗と 1 ( E) なのでつじつまが合います.

 e^{j\theta}=\cosh\theta+\sinh\theta なる関係が成り立つので同じように  e^{\begin{pmatrix} 0 & \theta \\ \theta & 0 \end{pmatrix}} = e^{J\theta} = E\cosh\theta+J\sinh\theta = \begin{pmatrix} \cosh\theta & \sinh\theta \\ \sinh\theta & \cosh\theta \end{pmatrix} です.

Lorentz 変換とかに関係ありそう.


あと全然関係ないんですが,なんで共軛とるかわからないといえばあれです.複素ベクトルの内積をとるときって片方の共軛をとるじゃないですか. \vec{a}=\begin{pmatrix} a_1 \\ a_2 \\ a_3 \end{pmatrix}, \vec{b}=\begin{pmatrix} b_1 \\ b_2 \\ b_3 \end{pmatrix} なら, \vec{a}\cdot\vec{b} = \bar{a_1}b_1+\bar{a_2}b_2+\bar{a_3}b_3 みたいに.あれがなんでかって話ですね.まぁ  \bar{z}z=|z|^2 なので, \vec{a}\cdot\vec{a} = \lvert a_1\rvert^2+\lvert a_2\rvert^2+\lvert a_3\rvert^2 = \lvert\vec{a}\rvert^2 となるようになってるといえばおしまいです.1 次元複素ベクトル (複素数) 
 \alpha = \lvert\alpha\rvert e^{\arg\alpha}, \beta = \lvert\beta\rvert e^{\arg\beta}内積を考えると, \bar{\alpha}\beta = \lvert\alpha\rvert\lvert\beta\rvert e^{\arg(\beta-\alpha)} となります.これの実部をとると 大きさ x 大きさ x cos (なす角) なので内積っぽいです.

計算幾何とかで複素数クラスをベクトルに流用する場合,このようにして内積外積をスマートに記述したりします.

以上.行列を複素数に対応付ければ見通しが良い例,無数にありそうですが僕が観測した範囲ではこんな感じです.他にあったら教えてください.

もっと本格的な記事も気が向けば書きます (書くとは言ってない)

*1:知らない人は複素平面で調べればわかるかも

*2: e^{i\theta}=\cos\theta+i\sin\theta,Euler の公式で調べてみてください