43 平面上の数
ソラの期待は、予想と違う方向で実現することになった。
――まさか対戦相手別勝敗表を作るのがこんなに大変だとは、思わなかった。
ソラが泣き言を漏らすのには理由があった。
ジンノ村の冒険者ギルドでは、模擬戦の対戦結果を記録していたが、それはあくまでもギルド内で掲示するためのもので、一年間の勝敗表にまとめることは想定されていない。
記録された対戦結果は、開催日ごとに別々の魔導文書になっており、200文書以上ある。さらに、表題、会場、時間など、勝敗表作成にとって余分な情報が付加されている。対戦結果は、第一試合、A勝、B負、第二試合、C分、D分、といった箇条書きであり、ここから冒険者の名前と勝敗を抜き出す必要がある。
さらに、引き分けの勝負や、極端に試合数が少ない冒険者の扱い、強くても派遣すべきでない冒険者の選別で揉め、追加の打ち合わせが必要となった。
「アタイも行きたいさね」
ゴネるランをジムが説得して、何とか納得させるまで、結構な時間が浪費された。
結局、引き分けは0.5勝の1試合扱い、年間試合数40以上の冒険者のみを対象、ギルドマスターのランおよび他の数名は派遣不可と定められた。ただし、強者との対戦結果は冒険者の強さを決める有用な情報であるので、派遣不可であっても計算には含めることになった。これにより、強さを求める必要がある冒険者の数は40まで絞り込まれた。
――多数の魔導文書を読み込んで一つの魔導帳票にまとめる処理の手順を記述すると、魔導帳票ツールがその手順通りに動くのは楽しかった。でも、勝ちの表記が、かち、だったり、複数試合で結果が同じときに、掛ける3、とか書くのは勘弁してほしかった。
ソラは、表記の揺れや独特の省略表現の意味を確認するために、模擬戦の担当者に何度か問い合わせる必要があった。
――結局、一つの対戦相手別勝敗表を作るのに、丸四日間も掛かったよ。
ソラが苦労して作った勝敗表は、縦横が40掛ける40の行列である。ここから個別の勝率の行列を作って、その固有値と固有ベクトルを求める処理は一瞬で完了した。大きな行列に対しても、適切に動作することが検証できたが、同時に勝敗表の作成作業がいかに非効率的かを端的に示すことになった。
ジンノ村の冒険者ギルドだけであれば、まだよかった。
ジンノ村の冒険者ギルドでは、最新の手法で対人戦闘での強さを決めている、という噂を聞きつけた王都近郊の複数の冒険者ギルドが、ソラの会社であるナンバーズに同一案件を持ち込んだのである。
どの冒険者ギルドでも模擬戦を推奨しており、対戦結果を記録しているので、原理的には、同じ手法で冒険者の対人戦闘での強さを求めることができる。しかし、対戦結果の記録方法は冒険者ギルドによって千差万別である。
魔導帳票ツールには、紙に書かれた表を読み取って魔導帳票に変換する機能があるが、表記の揺れの影響が大きく、後処理の確認作業が煩雑となる。そのため、ソラは対戦結果を魔導文書か魔導帳票で保持している案件だけに限ったが、勝敗表の作成は依然として非効率的な作業である。ソラのやる気が出ないのも致し方ないと言えよう。
――あ~、必要とは分かっていても、どうもこういう泥臭い作業は苦手だ。理想世界のシンプルなモデルで、現実世界の難しい課題をスパッと解決みたいなのがいいなあ。シンプルなモデルと言えば、数直線を平面に拡張する師匠の話は面白かったな。
ソラは、作業の手を休めて、数直線を拡張するジンの講義を思い起こす。
ジンは、その講義をこう始めた。
「固有値と固有ベクトルは、線形代数の強力な道具じゃ。しかし、坊やが知っている数の範囲では、固有値は存在したり、しなかったりする。こういったややこしい事態が、望ましくないことは分かるじゃろう」
ジンは、そう言った後、2掛ける2のサイズの行列をソラに示す。
0 -1
1 0
「この正方行列をJと呼ぼうかの。Jの2乗は、単位行列にマイナス1を掛けたものになる。もし、Jに固有値λと固有ベクトルxがあったら、どうなるかの?」
ジンの問いかけに、ソラは淀みなく答える。
「J掛けるxは、λ掛けるx、に等しいです。ですから、Jの2乗、掛けるxは、λの2乗、掛けるx、に等しくなり、これがマイナスxになります。xには0でない要素がありますから、結局、λの2乗はマイナス1です。どんな数でも2乗すると0以上ですから、行列Jに固有値は存在しません」
ソラの回答に、ジンは、嬉しそうな表情を浮かべる。
「その通りじゃ。これは、λの2乗がマイナス1、という2次の方程式に解がないと言い換えることもできる。こういった方程式を総称して、一変数の代数方程式と言う。つまり、代数方程式にも解があったり、なかったりするということじゃ」
ジンの解説に、ソラは反論を試みる。
「でも、どんな数でも2乗すると0以上になるので、代数方程式も解なしと答えるのが正しいのではないですか?」
ジンは、ソラに説明するため、小数を例として取り上げる。
「人数を数えるときは、普通は0以上の整数を使う。じゃが、3人で3時間掛かる作業を2時間で終わらせたいときに、単純に計算して4.5人とする場合もあるじゃろう」
「多くても5人手配すればいいという、人数の見積もりに使えますね。また、1人を半分休憩させても時間内に終わることが分かります。さらに、何度も同じ作業をするときの、平均人数という意味もあります」
ソラの補足に、ジンは満足そうにうなずく。
「そうじゃ。だから、数の住む理想世界で、9割る2は整数にならないから解なし、とするよりは、理想世界では一旦、4.5という答えを出して、それをどう活用するかは、現実世界の課題に応じて決める方が有用じゃろう」
ジンの解説を受けて、ソラは納得したような表情で口を開く。
「なるほど。だから、代数方程式がつねに解を持つように、数を拡張したものを考えて、それをどう使うかは課題に応じて決めるようにしようということですね。シンプルになるので、よいと思います。でも、もう数直線は数で一杯なので、拡張する場所がないように思うのですが」
ソラの疑問に答えるべく、ジンは複素平面を導入する。
「じゃから、数直線に直交する軸を追加して、その平面上の点を数と見なすことにする。この平面のことを複素平面、数直線の軸を実軸、追加した軸を虚軸と名付ける。複素平面の数であることを強調する場合、複素数と呼ぶ。これまで坊やが数と言っていたものは、実数と呼んで区別する」
ソラは、ジンの説明で浮かんだ疑問を口にする。
「数というからには、大小比較や、足し算、引き算、掛け算、割り算などができないといけないと思うのですが、平面上の点にそんなことができるのですか?」
ジンは、こともなげに答える。
「ああ、できるぞ。まず準備から行こうかの。複素数zは平面上の点じゃから、実軸、虚軸の座標値である二つの実数x、yの対(x, y)で表せる。xをzの実部、yをzの虚部と呼ぶ」
続けて、ジンは複素数の大小比較に関して述べる。
「平面上の点じゃから、実数みたいに一列には並んでいない。だから厳密な意味での大小比較はできない。しかし、代替手段として、(0, 0)からの距離がある。これを複素数の絶対値と呼ぶ。絶対値を使うと、二つの複素数がある値よりも近いかどうかなどを表せるので、それで困らないことが多い」
ソラは、確認の意味でジンの説明を補う。
「絶対値とは、その複素数から実軸に垂線を下ろしてできる直角三角形の斜辺の長さですね。つまり、ピタゴラスの定理から、絶対値は、実部の2乗と虚部の2乗を足した値のルートになります」
ジンは、そうじゃ、と同意した。
次に、ジンは、複素数の足し算、引き算、掛け算を定義する。
「複素数の足し算、引き算、掛け算は、複素数をある種の行列と見なすことで定める」
ジンの説明が理解できず、ソラは、どういうことですか、と尋ねた。
ジンは、2掛ける2のサイズの行列をソラに示す。
実部 マイナス1、掛ける虚部
虚部 実部
「一つの複素数に対して、この形の行列を対応付ける。複素数同士の足し算、引き算、掛け算は、対応する行列を計算した結果と決めるのじゃ」
ソラは、複素数の足し算、引き算について確認する。
「複素数の足し算、引き算は、それぞれの実部、虚部を足したり引いたりすることになりますね。2要素のベクトルと同じ扱いなので、分かりやすいです。(0, 0)は、足しても引いても値が変わりません」
ジンは、その通りじゃ、と返した。
ソラは、複素数の掛け算の性質を挙げる。
「複素数の掛け算に関してすぐ分かることとして、虚部が0の複素数を掛けると、実部、虚部が定数倍されます。特に、(1, 0)は単位行列に対応するので、掛けても値が変わりません。さらに、一般の行列の掛け算とは違い、掛け算の順番を入れ替えても値は変わりません」
「他に分かることはないかの?」
「(0, 1)は、さっきの行列Jに対応するので、2乗すると、単位行列のマイナス1倍、だから複素数としては、(-1, 0)になります。なるほど、虚部が0の複素数を実数と思えば、2乗するとマイナス1になる数があると言うわけですね」
ソラの報告に対して、ジンは嬉しそうに応える。
「その通りじゃ。(0, 1)は虚数単位と言われている。iという記号で表すこともあるのお。2乗してマイナス1になる複素数は、iとマイナスiの二つじゃ」
ソラは、ふと気づいたように尋ねる。
「もしかして、逆数には逆行列を対応付けるのですか?」
ジンは笑顔を浮かべて答える。
「鋭いのお。この形の行列は、その逆行列もこの形になる。逆行列に対応する複素数が元の複素数の逆数じゃ。(0, 0)でない複素数にはつねに逆数が存在する。複素数の割り算は、割る数の逆数の掛け算じゃ」
続いて、ジンは、複素数の掛け算と図形との関係をソラに紹介する。
「(0, 0)と複素数を結んだ線分と、正の実軸との角度をその複素数の偏角と定義する。複素数の掛け算と偏角には面白い関係がある。絶対値が1の複素数を掛けると、絶対値は1のままで偏角は足し算になる。例えば、虚数単位iの偏角は直角で1/4周、iを2乗したマイナス1の偏角は1/2周で、iの偏角の2倍じゃ」
「面白いですね。絶対値が1とは限らない一般の複素数の掛け算ではどうなりますか?」
ソラが質問すると、ジンは一般の複素数の場合を述べる。
「(0, 0)でない複素数は、その絶対値で割れば、絶対値が1になる。このことから、複素数の掛け算の結果は、絶対値が掛けた値、偏角が足した値の複素数になる」
一呼吸おいて、ジンは、特別な代数方程式が解を持つことを説明する。
「nを正の整数、(0, 0)でない複素数wの絶対値をr、偏角をaとする。連続性の公理から、n乗するとrになるような正の実数tが存在することが分かる。絶対値がtで偏角がa/nの複素数は、n乗するとwになる。wが(0, 0)のときは、(0, 0)をn乗するとwになる。つまり、n乗するとwになるという代数方程式はつねに解を持つ」
「n乗するとwになる複素数は、他にはないのですか?」
「(0, 0)の場合を除けば、全部でn個じゃ。それらは、絶対値はみな同じで、偏角が1周の整数倍、割る、n、だけ異なる。例えば、4乗すると1になる複素数は、偏角が0の(1, 0)、偏角が1/4周のi、偏角が1/2周のマイナス1、偏角が3/4周のマイナスiの四つじゃ」
ここまでの講義で、n乗が所与の複素数に等しいという代数方程式にはつねに解があることが明らかになった。
ソラは、どんな代数方程式にも解があるのかどうか、ジンに尋ねた。
「ああ、あるぞ。代数学の基本定理という定理で、解の存在が保証される。せっかくだから、この定理の証明の概略を紹介しようかの」
ジンの申し出に、ソラは、よろしくお願いします、と応じた。
ジンは、代数学の基本定理の証明の概略を話し始めた。
ジンは、まず、対象とする代数方程式を未知数zの次数が高い順に並べ、zのn乗と残りを足すと0、の形に整理した。nは1以上の整数で、残りは先頭のnよりも次数が低い。
次に、ジンは、複素数に対して0以上の実数を返す関数fを定義する。
「対象とする代数方程式の左辺の絶対値をzの関数と見なして、f(z)と表す。fは複素数に対して0以上の実数を返す。f(z)が0になるようなzがあれば、それは対象とする代数方程式の解じゃ。だから、そういうzが存在することを示す」
「平面上の点zに高さf(z)を割り当てれば、立体地図のようなfのグラフが描けますね」
ソラの指摘に、ジンはうなずいた。
ジンは、関数fのグラフの形から、f(z)が最小となる点の存在を主張する。
「zの絶対値が大きくなると、残りは相対的に無視できるから、f(z)はどんどん大きくなることが分かる。つまり、fのグラフは周囲をぐるりと高い山で囲まれた丘陵のような形じゃ。だから、丘陵のどこかにf(z)が最小となる点が存在する」
ジンは、最小となる点をα、そのときのfの値f(α)をmと書いた。mは0以上の値で、mが0の場合は、αが代数方程式の解になる。
そこで、ジンは、mが正にはならないことの証明に取り掛かる。そのために、一旦、mは正と仮定して、αの近辺でf(z)がどう変化しているかを調べる。
「zとαとの差分をwと置いて、f(z)をwの式で表す。それをg(w)としようかの。g(w)は、m、引く、γ、掛ける、wのk乗、足す、おまけという形をした複素数の絶対値になる。ここで、γは0でない複素数、kは1以上の整数、おまけは、それよりも高い次数じゃ」
「kは係数が0でない最小の次数、γはその係数ですね。定数項がmなのは、wが0のときzがαになるからですね。分かります」
ソラの補足に、ジンは、その通りじゃ、と返した。
ジンは、k乗するとm/γになるという代数方程式には必ず解があることから、その解の一つをβと書いた。εを小さい正の実数として、wが、ε掛けるβのときのg(w)の値を考え、結論として、mが正にはなりえないことを導く。
「wが、ε掛けるβのときのg(w)の値を考える。それは、(1、引く、εのk乗)、掛ける、m、におまけを足した複素数の絶対値になる。εを十分小さく取れば、おまけは相対的に無視できるから、g(w)の値はmよりも小さくなる。mは最小値だから、これはおかしい。よって、mは0と分かり、αが解になる」
これで、どんな代数方程式にも解があることが示された。
ソラは、ジンの説明に対して感想を述べる。
「何かの最小値をとって、ある条件を仮定するとおかしなことが起こるから、その条件は成り立たないという論法ですね。ルート2が分子分母が整数の分数で表せないことを示す証明でも使ったので、なじみがあります」
ジンは、そうじゃな、よく使われているのお、と同意した。
ジンは、数直線を複素平面に拡張する講義の最後に、複素数の表記法を取り上げる。
「最後に、複素数の表記について話そうかの。複素数(x, y)は、実数x、yを虚部が0の複素数と見なせば、x足す、y掛けるi、と等しくなる。複素数の表記としては、この書き方が標準的じゃ。(x, y)と書くのは、複素平面の点であることを強調する場合だけじゃな」
「師匠、ありがとうございました」
ソラは、講義を受けて、複素数への親近感を覚えた。なんか、数として視える気がする。これも数覚スキルの効果かな、数と言われるのも納得だと、ソラは内心でつぶやいた。




