57 狙撃
王都郊外の暗闇の中、暗視ゴーグルを装着したソラは、立ち止って魔導銃を構え、誘拐犯の一人が背負う阻害魔導具をじっと見つめる。
――Frontの文字がある。ということは魔導具の表面が見えていて、左下のあそこが一番目の頂点だ。そこから反時計まわりに二番、三番、四番だな。
ソラは、阻害魔導具の四つの頂点を番号付きで意識する。
頂点1:-0.19、 99.96、1.30
頂点2: 0.17、 99.95、1.32
頂点3: 0.19、100.05、1.71
頂点4:-0.18、100.03、1.70
――頂点の座標値が小数点以下二桁まで分かる! 普段はここまでは分からないのに。魔導銃の特殊効果かな。
ソラは、自身の数覚スキルの高さに驚きつつ、魔導銃の応答を待つ。
魔導銃は思念の読み取りの完了を振動で示した。
――今だ!
ソラは、魔導銃の引き金を引く。
鈍い音とともに魔導弾が発射された。魔導弾は、地面を這うようにして誘拐犯に向かう。
――そのまま、飛んでけ!
ソラは、魔導弾の軌道をかたずをのんで見守る。
ほんの数秒間が、ソラにとっては何時間にも感じられた。
魔導弾は、誘拐犯が背負う阻害魔導具の中央付近に当たり、ボンという音を立てて消失した。
そのとき、ジンから二人に念話が届いた。
「魔導波阻害エリアの消失を確認した。坊や、成功じゃ!」
ナイツはすかさず、手を高く掲げる。それを合図に、後方から五名の近衛騎士団員がソラたちに駆け寄り、追い抜いて誘拐犯に向かう。
ソラは、大役を果たした後の虚脱感を覚えながら、ぼんやりと近衛騎士団員が誘拐犯を捕らえるのを見ていた。
ジンも気楽な口調でソラに話しかける。
「坊や、よくやった! 線形代数が誘拐犯逮捕に役立つとはのう」
ジンの話に、ソラは興味を持って尋ねる。
「せっかくですから、どんなモデル化をしたのか教えてもらえませんか」
「いいじゃろう」
ジンは、魔導弾の自律飛行機能を用いた狙撃のモデル化の説明を始める。
・準備として、阻害魔導具の中心を原点とする正規直交座標系を定める。Frontという文字列の方向が第一軸、魔導具の背面に向かう方向が第二軸、第一軸と直交する表面上の方向が第三軸。この座標系を魔導具座標系と称する。
・魔導具座標系における、四つの頂点の座標は以下の通りである。
頂点1:-0.2、0、-0.2
頂点2: 0.2、0、-0.2
頂点3: 0.2、0、 0.2
頂点4:-0.2、0、 0.2
・魔導具座標系における頂点座標の一つをベクトルと見なし、aとする。狙撃時に用いた狙撃座標系における対応する頂点の座標もベクトルと見なし、bとする。このとき、bは、R掛けるa、足すt、に等しいとモデル化する。
・ここで、Rは、サイズが3掛ける3の直交行列。魔導具座標系の第一軸、第二軸、第三軸が狙撃座標系でどちらを向いているかを表す。ここでは、回転行列と称する。
・tは、三要素のベクトル。魔導具座標系での原点が狙撃座標系でどこにあるかを表す。ここでは、並進ベクトルと称する。
・二つの座標系における四つの頂点の座標が与えられているので、それを用いて、回転行列Rと並進ベクトルtを最小二乗法で求める。
・求められた回転行列Rと並進ベクトルtに基づき、魔導具の表面に垂直に当たるように魔導弾が自律的に飛行する。
「魔導弾は、自身を原点とする固有の正規直交座標系である魔導弾座標系を持っておる。発射時は、狙撃座標系と同一じゃ。魔導弾は、魔導弾座標系において、ほぼ第二軸の方向に飛んでいく」
ジンは、一息おいて続ける。
「魔導弾の飛行に伴い、魔導弾座標系は次第に魔導具座標系に近づいていく。そうなるように軌道が調整される。つまり、魔導弾座標系と魔導具座標系の関係を表す回転行列Rと並進ベクトルtは、滑らかに変化し、それぞれ単位行列と0ベクトルに近づく。これらが、単位行列と0ベクトルになった瞬間が、着弾じゃ」
ジンの説明が終わると、ソラは不明点を尋ねる。
「最小二乗法とおっしゃいましたが、具体的な評価基準は何ですか?」
「四つの頂点それぞれにおける、坊やが指定した座標とモデルでの座標との差のノルムの2乗を四つの頂点で足したものじゃ」
ソラは、評価基準を思い浮かべ、まず並進ベクトルについて最小化する。
「この評価基準を最小にする並進ベクトルtは、狙撃座標系での4頂点の座標の平均、引く、R掛ける、魔導具座標系での4頂点の座標の平均、に等しくなると思います」
「その通りじゃ」
ソラは、次に回転行列Rが最小にすべき評価関数Jを導く。
「このtを代入すると、Rが最小にすべき評価関数Jは、(B、引く、R掛けるA)の2乗和、と表されます。ここで、Bは狙撃座標系での4頂点の平均からの変位ベクトルを並べたサイズが3掛ける4の行列。Aは魔導具座標系での4頂点の平均からの変位ベクトルを並べたサイズが3掛ける4の行列です」
ジンは、ああ、と同意した。
「でも、この評価関数Jを最小にするRをどうやって求めればよいか、分かりません」
ソラが助けを求めると、ジンは行列のトレースを紹介する。
「正方行列の対角要素をすべて足したものを、その行列のトレースと呼ぶ。トレースを使って、評価関数Jを変形すればよいじゃろう」
「分かりました」
ソラはそう言った後、評価関数Jの変形を試みる。
・行列Xの2乗和は、(Xの転置、掛ける、X)のトレースに等しいから、評価関数Jは((B、引く、R掛けるA)の転置、掛ける、(B、引く、R掛けるA))のトレース、に等しくなる。
・Rは直交行列なので、上式のトレースを取る行列は、Rによらない行列、引く、Bの転置、掛けるR掛けるA、引く、(Bの転置、掛ける、R掛けるA)の転置、になる。
「ヒントを出そうかの。転置行列のトレースは元の行列のトレースと等しい。さらに、二つの行列P、Qに対して、(P掛けるQ)のトレースと、(Q掛けるP)のトレースは、等しくなるぞ」
ジンのヒントに、ソラは、なるほど、とつぶやいた。
「分かりました。評価関数Jを最小にするRは、次の評価関数Kを最大にするものです。評価関数Kは、(R掛けるA掛ける、Bの転置)のトレース、です。ここで、A掛ける、Bの転置をCと置きます。Cは正方行列で、サイズは3掛ける3です。Cをフルサイズの特異値分解すれば、Cが対角行列の場合に帰着できます」
正方行列Cのフルサイズの特異値分解をU掛けるΣ、掛ける、Vの転置とする。Uはサイズが3掛ける3の直交行列、Σはサイズが3掛ける3の対角行列、Vはサイズが3掛ける3の直交行列である。
ここで、ジンは、ソラに回転行列の留意点を伝える。
「魔導弾の飛行に伴い、Rは直交行列のまま滑らかに変化していき、着弾時には単位行列になる。直交行列の行列式は1かマイナス1じゃが、単位行列へ滑らかに変化することができる直交行列は、行列式が1であるものに限られる」
「たしかに、行列式がマイナス1からいきなり1に飛んだりはできないですね」
「行列式が1の直交行列を回転行列と呼ぶ。求めるべきRは回転行列である必要がある。最初に、Rを回転行列と呼んだのは、そのためじゃ」
ソラは、なるほど、とうなずいた。
ジンは留意点の説明を続ける。
「坊やがCと置いた行列は、計算すれば分かるが正則にならず、ランクは2じゃ。だから、その特異値分解において、UとVでは第三特異値に対応するベクトルとして、逆向き、すなわちマイナス1倍したものも許される。そこで、UとVの行列式を掛けたら1となるように、両者のベクトルの向きを選ぶ」
「なるほど。U、Vをそう決めるわけですね。特異値を大きい順にa、b、cと置きます。cは0ですね。Vの転置、掛けるR掛けるU、をSと置きます。Sの対角要素をx、y、zとすると、評価関数Kは、a掛けるx、足す、b掛けるy、足す、c掛けるz、に等しくなります」
ソラは、一息おいて続ける。
「Sは直交行列なので、x、y、zの絶対値は1以下です。明らかに、評価関数Kを最大にするのは、x、y、zが1の場合、すなわちSが単位行列の場合です。よって、評価関数Kを最大にする回転行列Rは、V掛ける、Uの転置、になります。求められたRは、直交行列で、かつその行列式は1ですので、期待通り回転行列になっています」
ソラが計算結果を報告すると、ジンは嬉しそうに、よしよし、その通りじゃ、と応じた。
ジンは、続けて、ソラが使った魔導銃の記録を読み取り、計算された回転行列Rと並進ベクトルtを小数点以下第二桁までソラに伝える。
回転行列R:
1.00 0.00 0.00
0.00 0.98 0.21
0.00 -0.21 0.98
並進ベクトルt:
0.00、100.00、1.51
「魔導銃の記録が読めたりするんですね。確かに計算で得られた回転行列Rの行列式は1になっています」
ソラが感想を述べると、ジンは悪びれる様子もなく告げる。
「魔導波を阻害する魔導具も大概じゃが、それを破壊する魔導銃も悪用されたらとんでもないことになる。万が一のための保険の機能が付いていることは王も了承済じゃ」
二人が会話をしているうちに、東の空が明るくなってきた。ソラは暗視ゴーグルを外し、近衛騎士団員が誘拐犯を連行して戻ってくるのを眺める。
誘拐犯は手錠を掛けられており、近衛騎士団員に引っ張られるようにのろのろ歩いている。
騎士団長のナイツは衰弱したトロワ姫を背負い、ソラの前で立ち止った。
「ソラ殿とジン殿のご尽力により、無事、トロワ姫を保護することができました。協力感謝します」
トロワ姫は目を開けて、ナイツに命じる。
「ここで下ろすのじゃ」
ナイツはトロワ姫をそっと地面に下ろした。
トロワ姫は、おぼつかない足取りでソラに向かう。
トロワ姫はよろけてソラに寄り掛かり、小声で話しかける。
「怖かったのじゃ。ちょっとは慰めんか」
ソラは、トロワ姫の背中に手をまわして、耳元でささやく。
「心配いたしましたが、ご無事でなによりです」
ナイツがわざとらしく咳払いをしたので、ソラはあわててトロワ姫から手を離した。
「今回ばかりは覚悟したぞえ。そなたがいなければどうなっていたことか。褒めてつかわす」
「ありがたきお言葉」
ソラがかしこまって返事をすると、トロワ姫はナイツのそばに戻り、王城まで頼むのじゃ、と告げた。
ソラは、念話でジンに伝える。
「ボクたちは王城に戻ります」
「分かった。ゆっくり休め」
ソラは、ジンとの念話を切った。
「では、王城に戻りましょうか」
ナイツの掛け声で、ソラとナイツは先行する近衛騎士団員の後について王城に向かう。
歩いているうちに、東から陽が差してきた。今日もいい天気になりそうだ、とソラはつぶやいた。




