[logo] Web連載「数学ガールの秘密ノート」
Share

第117回 シーズン12 エピソード7
星空トランスフォーム(前編)

書籍『数学ガールの秘密ノート/行列が描くもの』

この記事は『数学ガールの秘密ノート/行列が描くもの』として書籍化されています。

無料でWeb立ち読み アマゾンで購入

登場人物紹介

:数学が好きな高校生。

テトラちゃんの後輩。好奇心旺盛で根気強い《元気少女》。

ミルカさん:数学が好きな高校生。のクラスメート。長い黒髪の《饒舌才媛》。

リサ:自在にプログラミングを行う無口な女子。赤い髪の《コンピュータ少女》。

$ \newcommand{\TEXT}[1]{\textbf{#1}} \newcommand{\REMTEXT}[1]{\textbf{#1}} \newcommand{\MATAWA}{\mathrel{\REMTEXT{または}}} \newcommand{\KATSU}{\mathrel{\REMTEXT{かつ}}} \newcommand{\LEFTRIGHTARROW}{\quad\Longleftrightarrow\quad} \newcommand{\LEFTARROW}{\quad\Longleftarrow\quad} \newcommand{\RIGHTARROW}{\quad\Longrightarrow\quad} \newcommand{\MAT}[4]{\left(\begin{array}{cc} #1 & #2 \\ #3 & #4 \end{array} \right)} \newcommand{\UL}[1]{\underline{#1}} \newcommand{\UUL}[1]{\underline{\underline{#1}}} \newcommand{\RELATED}{\dashleftarrow\dashrightarrow} \newcommand{\VECV}[2]{\left(\renewcommand{\arraycolsep}{0pt}\begin{array}{c} #1 \\ #2 \end{array} \right)} \newcommand{\TVECV}[2]{\genfrac{(}{)}{0pt}{1}{#1}{#2}}% $

双倉図書館

テトラちゃん、それにミルカさんは今日、双倉図書館(ならびくらとしょかん)に集まっている。

リサがプログラミングに関する発表を行うのを見に来たのだ。

発表は無事に終わり、いまはみんなでお茶を飲んでいるところ。

テトラ「リサちゃんの発表、あたしには難しかったみたいです」

リサ「《ちゃん》は不要」

ミルカ「今回は、大半がマニア向けの話だったような」

リサ「全部が」

テトラ「あ、でも、コンピュータグラフィクスの星空はきれいでした! あんなのが作れるってすごいです!」

「確かにきれいだったよね。あそこから星座の話にもってくるのか、という」

リサ「普通」

テトラ「ああいうプログラムって、難しいんでしょうね……」

リサ「基本は簡単」

ミルカ「簡単なものを基本という。大量の行列計算?」

リサ「ライブラリで一発」

テトラ「行列? 行列がプログラムに出てくるんですか?」

「なるほど。座標の計算をすることになるからか」

ミルカ「お茶が済んだら、リサに簡単なデモをしてもらおう。行列計算の基本」

行列計算の基本

僕たちは双倉図書館の一室に移動した。

リサがコンピュータをプロジェクタにつなぐと、 広い壁の中央にグラフ用紙……座標平面が描かれた。

座標平面

リサ「ミルカ氏が解説」

ミルカ「ふむ。まずは、座標平面上に点を打つことにしよう。テトラが点の座標を言う」

テトラ「ど、どこでもいいんですか? それでは、先手のあたしは、点 $(2,1)$ で」

「テトラちゃん……囲碁将棋じゃないんだから」

リサがキーを叩くと、座標平面上に点が映し出される。

点 $(2,1)$

「まあ、確かに点 $(2,1)$ だよね」

ミルカ「$x$ 座標と $y$ 座標が決まれば、点が一つ決まる。 だから、ヴェクタを使って……縦ベクトルを使って $\VECV21$ と書いてもかまわない」

点 $(2,1)$ を縦ベクトル $\VECV21$ と書く

ミルカ「そしてここで適当な行列を決めよう。君が決める」

「え、適当に決めていいの?」

ミルカ「いい。センスが問われるけれど」

「(何のセンスなんだろう)じゃあ、とりあえず簡単なもので……たとえば、 $\left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)$」

ミルカ「その行列 $\left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)$ と、点を表しているこの縦ベクトル $\VECV21$ との積を計算すれば $\VECV42$ になる」

テトラ「ちょ、ちょっと待ってください。確認なんですが、 《行列と縦ベクトルの積》というのは、 行列の積と同じような計算をするんですよね。 《掛けて、掛けて、足す》です」

ミルカ「もちろん」

行列と縦ベクトルの積

$$ \left(\begin{array}{cc} a & b \\ c & d \end{array} \right)\VECV{x}{y} = \VECV{ax + by}{cx + dy} $$

行列 $\left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)$ と縦ベクトル $\VECV21$ の積は $\VECV42$ になる $$ \begin{align*} \left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)\VECV21 &= \VECV{2 \times 2 + 0 \times 1}{0 \times 2 + 2 \times 1} \\ &= \VECV{4}{2} \end{align*} $$

テトラ「すみません、話の腰を折ってしまいました」

ミルカ「行列 $\left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)$ と縦ベクトル $\VECV21$ を掛けて、 縦ベクトル $\VECV42$ を得た。 もちろんこの縦ベクトル $\VECV42$ も座標平面上の点 $(4,2)$ と見なせる」

テトラ「そうですね」

ミルカ「こんなふうにも言える。 すなわち、 $\left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)$ という行列は、点 $(2,1)$ を点 $(4,2)$ に移す」

テトラ「移す……」

ミルカ「リサ、矢印出る?」

リサ「当然」

行列 $\left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)$ は、点 $(2,1)$ を点 $(4,2)$ に移す

$$ \left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)\VECV21 = \VECV42 $$

テトラ「……」

「行列が変われば、点が移る先も変わるよね。 たとえば、 $\left(\begin{array}{cc} 0 & 1 \\ 1 & 0 \end{array} \right)$ という行列とか」

リサ「いま出す」

行列 $\left(\begin{array}{cc} 0 & 1 \\ 1 & 0 \end{array} \right)$ は、点 $(2,1)$ を点 $(1,2)$ に移す

テトラ「え、ええっと。あ、そうですね。計算すればすぐに出ます」

$$ \begin{align*} \left(\begin{array}{cc} 0 & 1 \\ 1 & 0 \end{array} \right)\VECV21 &= \VECV{0\times2+1\times1}{1\times2+0\times1} \\ &= \VECV{1}{2} \\ \end{align*} $$

テトラ「あ……でも、考えてみれば当たり前です。 だって、点は $x$ と $y$ で決まりますよね。 行列と縦ベクトルの積を取ったら、 $x$ や $y$ の値は変化します。 それで点が動くというのは当たり前……ですよね?」

ミルカ「その通り。しかし、ここで自然な疑問が浮かんでくる」

テトラ「疑問……」

ミルカ「君が答える」

「それはもちろん……ひとつの行列が与えられたとき、 《この行列は、どんなふうに点を移すのか?》 という疑問だよね」

テトラ「え? でも、それは根気よく計算すればいい話ではないんでしょうか。 行列の積の方法はわかっています。ですから、行列が与えられれば、 点がどこに移されるかはわかりますよね。計算すれば」

リサ「あるいはプログラムで」

「もちろんそうだよ、テトラちゃん。計算すれば具体的にわかる。 でも、行列はその形を見るだけで、どんな変換を行うかわかるんだ。 パターンがあるんだよ」

テトラ「そうなんですか。……変換?」

ミルカ「$2\times2$ の行列は座標平面上の点を移す。それを、その行列がおこなう変換という。 正確には《一次変換》あるいは《線型変換》という」

テトラ「はあ……」

ミルカ「さっきは一点だけを移動した。行列がおこなう変換を見るために、 もっとたくさんの点を移してみよう。リサはすぐ出せるかな」

リサ「曖昧な指示」

ミルカ「しかし応えるリサ」

テトラ「きゃああっ! ……失礼しました。びっくりしてしまいました」

「たくさん出たなあ」

ミルカ「多すぎる。象限ごとに点の描き方も変えて」

リサ「仕様変更」

ミルカ「しかし応えるリサ」

「なるほど。一辺が $1$ の……いや、一辺が $2$ の正方形だね」

テトラ「この点を全部、行列を使って変換するわけですね」

ミルカ「たとえば、 $\left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)$ で変換した後」

行列 $\left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)$ による変換後

ミルカ「矢印でも出せるかな」

リサ「要求過多」

ミルカ「しかし応えるリサ」

行列 $\left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)$ による変換のようす

テトラ「なるほどです! 点がわあっと広がって」

「$\left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)$ は $2I$ だからね」

テトラ「$2I$ ……ということは、 $2\left(\begin{array}{cc} 1 & 0 \\ 0 & 1 \end{array} \right)$ ということですね。 ははあ、だから $2$ 倍に! これもまた《たとえ話》です。 《行列の世界》の $\left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)$ は、《数の世界》の $2$ のたとえ話みたいです」

「点が広がる様子は、一般的な点 $(x,y)$ がどこに移動するかを見ればわかりやすいよ。 つまり、縦ベクトル $\VECV{x}{y}$ がどういう縦ベクトルに変換されるか」

行列 $\left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)$ は、点 $(x,y)$ をどこに移動するか

$$ \begin{align*} \left(\begin{array}{cc} 2 & 0 \\ 0 & 2 \end{array} \right)\VECV{x}{y} &= \VECV{2\times x + 0\times y}{0\times x + 2\times y} \\ &= \VECV{2x}{2y} \\ \end{align*} $$

テトラ「わかりました。 $x$ 座標も $y$ 座標も、どちらも $2$ 倍になっているから、あのようにわあっと広がったわけですね。 むむ……ということはですよ。もしかして、 $\frac12I = \left(\begin{array}{cc} \frac12 & 0 \\ 0 & \frac12 \end{array} \right)$ を使えば、きゅうっと縮むんでしょうか」

リサ「$0.5$ を使った」

行列 $\left(\begin{array}{cc} \frac12 & 0 \\ 0 & \frac12 \end{array} \right)$ による変換

テトラ「なるほどです。 $2I$ なら広がって、 $\frac12I$ なら縮んで、そして単位行列 $I$ ならばそのままですね、きっと」

リサ「単位行列」

行列 $\left(\begin{array}{cc} 1 & 0 \\ 0 & 1 \end{array} \right)$ による変換

テトラ「パターンという意味が少しわかりました。たとえば、 $a$ という文字を使って、 $\left(\begin{array}{cc} a & 0 \\ 0 & a \end{array} \right)$ という形をした行列を作れば、ちょうど $a$ 倍だけ広がることになるんですね」

「そうだね。 $\left(\begin{array}{cc} a & 0 \\ 0 & a \end{array} \right)$ は原点を中心にして拡大する変換になるね。 $a > 1$ なら広がるし、 $0 < a < 1$ なら縮むし、 $a = 0$ なら……」

テトラ「ああ、 $a = 0$ なら、 $\left(\begin{array}{cc} 0 & 0 \\ 0 & 0 \end{array} \right)$ ですから、原点につぶれてしまいますね!」

「うんうん」

別の行列

ミルカ「$a \neq b$ の行列を試してみよう。 たとえば、 $\left(\begin{array}{cc} 3 & 0 \\ 0 & 2 \end{array} \right)$ はどんな変換になるか。リサ?」

リサ「表示開始」

行列 $\left(\begin{array}{cc} 3 & 0 \\ 0 & 2 \end{array} \right)$ による変換

テトラ「なるほどです。横方向には $3$ 倍で、縦方向には $2$ 倍ですね……」

「数と違うところだね。《方向》によって変えられる」

さらに別の行列

ミルカ「別の行列を試してみよう。 たとえば、そうだな。 $\left(\begin{array}{cc} 2 & 1 \\ 1 & 3 \end{array} \right)$ でやってみよう。 リサ、表示はストップ。 テトラ、どんな形が現れると思う?」

クイズ

以下の点を行列 $\left(\begin{array}{cc} 2 & 1 \\ 1 & 3 \end{array} \right)$ で変換すると、どんな形が現れるだろうか。

無料で「試し読み」できるのはここまでです。 この続きをお読みになるには「読み放題プラン」へのご参加が必要です。

ひと月500円で「読み放題プラン」へご参加いただきますと、 420本すべての記事が読み放題になりますので、 ぜひ、ご参加ください。


参加済みの方/すぐに参加したい方はこちら

結城浩のメンバーシップで参加 結城浩のpixivFANBOXで参加

(2015年5月15日)

書籍『数学ガールの秘密ノート/行列が描くもの』

この記事は『数学ガールの秘密ノート/行列が描くもの』として書籍化されています。

書籍化にあたっては、加筆修正をたくさん行い、 練習問題や研究問題も追加しました。

どの巻からでも読み始められますので、 ぜひどうぞ!

無料でWeb立ち読み アマゾンで購入

[icon]

結城浩(ゆうき・ひろし) @hyuki


『数学ガール』作者。 結城メルマガWeb連載を毎週書いてます。 文章書きとプログラミングが好きなクリスチャン。2014年日本数学会出版賞受賞。

Twitter note 結城メルマガ Mastodon Bluesky Threads Home