31歳からの数学修士

一児の父、元エンジニア、現数学徒

クリスマス・イブには i を語ろう

f:id:taketo1024:20141224191330p:plain

この記事は明日話したくなる数学豆知識アドベントカレンダーの24日目の記事です。(23日目:モンストラス・ムーンシャイン

どうも、taketo1024です。tsujimotterさんの熱い数学記事を読んでいたら胸が高まり、我慢できずブログを開設し記事を書かせて頂くことにしました。アドベントカレンダーの24日目という重要な日を頂いてしまい恐縮です。

この記事では10月に発表した「虚数は作れる!Swiftで学ぶ複素数」と同じ内容を、プログラミングではなく数学の話として書いてみようと思います。

複素数とは?

皆さんは複素数をどのように習いましたか?

二乗すると -1 になる「想像上の数」を i として、 z = x + yi であらわされる数を「複素数」と呼ぶ。複素数には実数と同様に四則演算が定義され、実数全体は直線であらわされるのに対して、複素数全体は2次元の平面を成す。これが実数を拡張した「数」だというのです。

f:id:taketo1024:20141224191149p:plain

「マイナス × マイナス = プラス」というように、どんな実数も2乗すれば0以上の実数になるはずなのに、いきなり出てきた i はそうならない。「そんな数あるなら見せてみろ!」と言いたくてももとより想像上の数だと言うのだからスッキリしない。

とりあえず数学だけの空想だと飲み込んだとしても、大学に入って現実の世界を扱うはずの物理学や工学で当たり前のように i を含む方程式が出てきたりして、いよいよ何がなんだか分からなくなります。

こんなモヤモヤを抱えたまま、あるいは深く考えるのをやめて、ただの計算の手段として複素数を使ってきた人は多いんじゃないかと思います。でも実は i は、高校レベルの数学の知識があれば割と簡単に作れるのです。

先に複素数の四則演算をおさらいしておきましょう:

複素数 z = x + yi, w = x' + y'i に対し、

\begin{eqnarray} 
z \pm w &=& (x \pm x') + (y \pm y')i \tag{1} \\\
zw &=& (xx' - yy') + (xy' + x'y)i \tag{2} \\\
1/z &=& \frac{1}{x^2 + y^2}(x - yi) \tag{3} \\\
\end{eqnarray}


(2) の掛け算こそが複素数を特徴づける式ですね。(2) で  x = x' = 0, y = y' = 1 とした式が  i^2 = -1 であることを確認しておきましょう。

では、このような「複素数」を作ってみましょう!

その1: 2次元ベクトルから作る

複素数は平面上の点(ベクトル)と対応していましたが、ここでは逆に、平面上の点(ベクトル)が 複素数となるように演算を定義します。

まず、ベクトルには足し算と実数倍が定義されています:

\begin{eqnarray} 
(x, y) \pm (x', y') &=& (x \pm x', y \pm y') \\\
a(x, y) &=& (ax, ay) 
\end{eqnarray}


任意のベクトル (x, y) は、(1, 0) 成分と (0, 1) 成分に分解することができます:

(x, y) = (x, 0) + (0, y) = x(1, 0) + y(0, 1)


(1, 0)1 と書き、(0, 1)i と書くことにすれば、以下のように書けます:

(x, y) = x1 + yi


すると足し算の式はこう書き直せます:

 \begin{eqnarray} 
(x, y) \pm (x', y') &=& (x1 + yi) \pm (x'1 + y'i) \\\ 
&=& (x \pm x')1 + (y \pm y')i \tag{1'} 
\end{eqnarray}


これは複素数の足し算の式 (1) とそっくりですね。でもこれは単に2次元ベクトルの足し算を、複素数っぽい書き方にしただけです。この先も 1(1, 0)i(0, 1) と脳内変換しながら読み進めてみて下さい。

さて、この2次元ベクトルに「複素数っぽい掛け算  \times」を、以下を満たすように定義したいと思います:

\begin{eqnarray} 
&1 \times 1 = 1 \\\
&i \times 1 = 1 \times i = i \\\
&i \times i = -1
\end{eqnarray} \tag{A}


この  \times + との分配則を満たすとすれば、「積」はこうなります:

\begin{eqnarray} 
(x, y) \times (x', y') 
&=& (x1 + yi) \times (x'1 + y'i) \\\
&=& x1 \times (x'1 + y'i) + yi \times (x'1 + y'i) \\\
&=& (x1 \times x'1) + (x1 \times y'i) + (yi \times x'1) + (yi \times y'i) \\\
&=& xx'(1 \times 1) + xy'(1 \times i) + x'y(1 \times i) + yy'(i \times i) \\\
&=& xx'1 + xy'i + x'yi + yy'(-1) \\\
&=& (xx' - yy')1 + (xy' + x'y)i \tag{2'}
\end{eqnarray}


複素数の掛け算の式 (2) とそっくりになりましたね!

これはこの掛け算の計算結果を示しただけでなく、規則 (A) を満たすような掛け算はこう定義するしかないということも意味しています。というわけで、これを2次元ベクトルの「掛け算」と定義しましょう。

さらに  (x, y) の「逆数」は、 (x, y) と掛けて  1 になるような  (x', y') のことなので、

\begin{eqnarray} 
(x, y) \times (x', y')  = 1 
&\Leftrightarrow&
(xx' - yy')1 + (xy' + x'y)i = 1 + 0i \\\
&\Leftrightarrow&
\begin{cases}
xx' - yy' &=& 1 \\\
xy' + x'y &=& 0
\end{cases}
\end{eqnarray}


で、 x, y を定数と見て  x', y' に関する連立一次方程式を解けば、

\begin{eqnarray} 
(x', y') 
&=& \frac{1}{x^2 + y^2}(x, -y) \\\
&=& \frac{1}{x^2 + y^2}(x1 - yi) \tag{3'}
\end{eqnarray}


を得ます。

(1)〜(3) と (1')〜(3') を見比べてみましょう。ほとんど同じ形をしていますね!じゃあもうこれが複素数ってことにすればいいじゃないですか。つまり複素数とは、 xy平面の x軸を実数直線と見て、2次元ベクトルに (A) を満たす掛け算を入れたものだ、ということです。

はい、複素数、できました!

この掛け算のよくできているところは、(3') 式を見れば分かる通り、 (x, y) = (0, 0) でない限り必ず逆数を持つというところです。これは実数において 0 でない実数が必ず逆数を持つというのと同じです。こういう演算を持つ「数」のことを「体」といい、実数も複素数も「体」であるので「実数体」「複素数体」と言います。

複素数はちゃんと「体」になってくれたからこそ、実数を拡張した「数」として実数と同じように多項式や有理式に代入したりできるわけですね。いやぁ、なんという奇跡のような…

その2: 特殊な形の2次行列として作る

単位行列

I = \begin{pmatrix} 1 & 0 \\\ 0 & 1 \end{pmatrix}


は、行列において実数の 1 にあたるものです。 ここで

J = \begin{pmatrix} 0 & -1 \\\ 1 & 0 \end{pmatrix}


という行列の二乗を計算してみると、

\begin{eqnarray} 
J^2 
&=& \begin{pmatrix} 0 & -1 \\\ 1 & 0 \end{pmatrix} \begin{pmatrix} 0 & -1 \\\ 1 & 0 \end{pmatrix} \\\
&=& \begin{pmatrix} -1 & 0 \\\ 0 & -1 \end{pmatrix} \\\
&=& -I
\end{eqnarray}


となります。(もう展開は読めましたか?)

Z = xI + yJ = \begin{pmatrix} x & -y \\\ y & x \end{pmatrix}


という形の行列を考えると、行列の和は、

Z \pm Z' = (x \pm x')I + (y \pm y')J \tag{1''}

行列の積は、

\begin{eqnarray} 
ZZ' &=& (xI + yJ)(x'I + y'J) \\\
&=& xI(x'I + y'J) + yJ(x'I + y'J) \\\
&=& xIx'I + xIy'J + yJx'I + yJy'J \\\
&=& xx'I^2 + xy'IJ + x'yJI + yy'J^2 \\\
&=& xx'I + xy'J + x'yJ - yy'I \\\
&=& (xx' - yy')I + (xy' + x'y)J \tag{2''}
\end{eqnarray}


となり、和も積も xI + yJ の形になることが分かります。
さらにこの行列の逆行列は「逆行列の公式」より、

\begin{eqnarray} 
Z^{-1} &=& \frac{1}{x^2 + y^2}\begin{pmatrix} x & y \\\ -y & x \end{pmatrix} \\\
&=& \frac{1}{x^2 + y^2}(xI - yJ) \tag{3''}
\end{eqnarray}


で、これも xI + yJ の形になっています。

こうしてまた (1)〜(3) とほぼ同じ形の式が得られました!行列 xI を実数 x と見て J虚数単位 i であると見れば、この特殊な形の2次行列こそが複素数だということになるのです。

こっちの場合は「複素数を作った」というよりも「知ってるものの中に既にあった」という感じですね。まさにアハ現象!

一般の行列は必ずしも逆行列を持たないのに対し、 xI + yJ の形の行列は (3'') を見れば分かる通りゼロ行列でない限り必ず逆行列を持ちます。つまりこれもまた「体」になっているのです。大きな集合の中から、より美しい構造を持った小さな集合を取り出すことができたわけですね。うーむ、素晴らしい。


ところでこの2次行列、ちょっとした変形を施してみましょう。

\begin{eqnarray} 
r &=& \sqrt{x^2 + y^2}, \\\
u &=& x/r, \\\
v &=& y/r
\end{eqnarray}


とおくと、

 u^2 + v^2 = 1


より、 (u, v) は単位円上の点となるので、

 (u, v) = (cos\theta, sin\theta)


とおくことができます。すると元の行列は、

Z = \begin{pmatrix} x & -y \\\ y & x \end{pmatrix} = r\begin{pmatrix} cos\theta & -sin\theta \\\ sin\theta & cos\theta \end{pmatrix}


となり、これは見慣れた r\theta回転 の行列ではありませんか! 複素数の積が「絶対値の積、偏角の和」になっているのは、「拡大回転変換の合成」になっていたからなのです。

J をこの形に書き直してみれば、

\begin{eqnarray} 
J &=& \begin{pmatrix} cos90^{\circ} & -sin90^{\circ} \\\ sin90^{\circ} & cos90^{\circ} \end{pmatrix} \\\
J^2 = -I &=& \begin{pmatrix} cos180^{\circ} & -sin180^{\circ} \\\ sin180^{\circ} & cos180^{\circ} \end{pmatrix}
\end{eqnarray}


となるので、i^2 = -1 という神秘めいた式は 「左向け左を2回すれば後ろ向きになる」 という小学生でも分かることを主張しているに過ぎなかったのです。

まとめ

いかがでしたか?積年のモヤモヤは晴れたでしょうか?

数学はよく分からないものでも、掘り下げていけば必ず基礎の基礎まで辿ることができます。そして必要に応じて演算を拡張したり空間を作ったりできる…この感覚はプログラミングともよく似ていると思います。

「1 + 1 = 3」と書いたら小学校ではバツを食らいますが、別にそうしたければしていいのです。それがちゃんと役に立ち、数学的に意味のある体系をなすかどうかが難しいというだけで、数学そのものは万人に対して自由なのです。

最後に

このような企画に参加させて頂きありがとうございます。他の記事も面白いものばかりなので是非ともご覧下さい。(僕もまだ全て読めていない…!)

年明けにはプログラマのための数学勉強会という勉強会を開く予定です。参加者の募集は年明けからですが、ご興味のある方は是非チェックしておいて下さい。まだ直接お会いしていない@tsujimotterさんも発表してくれます!

それでは、美しい  i と共に、メリークリスマス!


よかったらこちらもどうぞ!