45 波状攻撃
それから、数日が経過した。
ソラをずっと悩ませていた勝敗表の作成作業が終わった。
ソラは、計算した冒険者の強さを一覧表にまとめ、各冒険者ギルドに送った。これで、冒険者の対人戦闘での強さを求める案件は完了である。
ソラは、自身が抱えているもう一つの案件である、魔物の壁案件に思いを巡らせる。
――魔物の壁案件も順調だな。二つのエリアの魔物の数も半々で安定しているし、そろそろ促進魔導具の効果を弱めて、停止させてもいいだろう。そう言えば、魔物の数が安定するかどうかを確率を使ったモデルで分析したことがあったな。
ソラは、確率を使ったモデルで、任意の初期分布から定常分布への収束を示したことを思い出す。
――そうそう、行列の三角化基底ベクトルを使って、初期分布のベクトルを三角化基底ベクトルの線形結合で表して、収束を証明したんだっけ。こんなことができるんだから、行列の三角化は強力だよね。
ソラは、行列の三角化の講義を振り返る。
「今日は、行列の三角化について話そうかのお。前に少し触れたが、これは、どんな正方行列でも扱いやすい形の行列に変換できるという話じゃ。魔物を波状攻撃で弱らせて従順にするようなイメージかのお」
ジンは、三角化の講義をそう言って始めた。
「行列の三角化も固有値と同様、具体的な計算は魔導具でできる。じゃから、ここでは三角化がなぜ可能かを説明する。数覚スキルが伸びてくれば、三角化が視えるようになり、三角化できるのは当たり前と感じられるようになる。ただし、この話は長丁場になる。あせらないようにな」
ジンは講義の概要を述べた。
そもそも三角化が分かっていないソラは、ジンに基本的な質問をする。
「三角化に出てくる、扱いやすい形の行列って何ですか?」
ソラの問いに対して、ジンは例を使って答える。
1 0.3
0 0.6
「こんなふうに対角要素の左下の要素がすべて0の正方行列じゃ。上三角行列と呼ぶ。逆に、対角要素の右上の要素がすべて0の正方行列は、下三角行列という名前になる」
「上三角行列が扱いやすいのは、なぜですか?」
ソラが続けて尋ねると、ジンは上三角行列の有用な性質を挙げる。
「理由はいくつもある。逆行列がある場合には簡単に計算できるし、固有値と固有ベクトルも容易に求めることができる。なんせ固有値は対角要素じゃからのお」
ソラは、さきほどジンが例に挙げた2掛ける2のサイズの行列に対して、対角要素の1と0.6が固有値になっていることを計算で確かめる。
「師匠の挙げた例では、確かにそうなっています。なんか不思議な気がします」
ソラが感想を述べると、ジンはこともなげに告げる。
「上三角行列が正則なのは、対角要素がすべて0でない場合、かつ、その場合に限る。この性質は、この行列を係数行列とする連立一次方程式を考えることで導かれる。じゃから、対角要素はすべて固有値で、他の固有値はない」
ソラは、それは便利ですね、と応じた。
「では三角化、つまり正方行列を上三角行列に変換する方法を説明しようかの。最初は例題を使う方がよいじゃろう」
ジンは、そう言った後、2掛ける2のサイズの行列Aをソラに示す。
0.888 0.084
0.384 0.712
「平面上の点の座標をベクトルと見なせば、行列Aを掛けることは、平面上の点を平面上の点に移す写像と言える。ぱっと見ても、点がどのように移されるかは分からない。そこで、行列Aの固有値と対応する固有ベクトルを一組求めて、Aの性質を分析する」
ジンは、魔導具を操作して一組の固有値と固有ベクトルを求める。固有値は1、対応する固有ベクトルは、(0.6, 0.8)と表示された。
「固有ベクトルは、定数倍しても構わないから、三角化ではノルムが1になるように取る。ノルムとは、要素の絶対値の2乗を足した値のルート、要するに原点からの距離のことじゃ。ノルムが1のベクトルを単位ベクトルと言う」
ソラは、魔導具が表示した固有ベクトルのノルムを計算して、1であることを確認した。
ソラは、確かに単位ベクトルになっていますね、とジンに返した。
「平面上の点(a, b)は、横軸(1, 0)と縦軸(0, 1)からなる座標系での座標値がそれぞれa、bであることを表している。別の座標系を使えば、同じ点でも違う座標値になる。じゃから、行列Aにとってうまい座標系を選んだらどうかという発想が出てくる。これを座標変換と言う」
ソラは、斜めに定規を当てて、点の位置を測っている様子を思い浮かべた。
「どんな座標系を使うのですか?」
ソラが尋ねると、ジンは座標系の条件について述べる。
「三角化では、正規直交という条件を課して座標系を選ぶ。座標系の各軸を表すベクトルを基底と呼ぶ。正規とは、各基底ベクトルが単位ベクトルであること、直交とは、基底ベクトル同士の内積が0になることじゃ。例えば、(1, 0)と(0, 1)は正規直交基底ベクトル、これらが定める座標系は正規直交座標系じゃ」
「内積が0ということは、原点と点を結んだ線分が直交することですね。分かります」
ソラが納得したところで、ジンは、正規直交座標系の性質をまとめておくぞ、とソラに告げ、箇条書きにした。ここで、eは、平面上の点を表すベクトル、p、qは、正規直交座標系の二つの基底ベクトルである。
1:どんなベクトルeでも、pとqの線形結合で表せる。すなわち、eが、a掛けるp、足す、b掛けるq、に等しくなるような数a、bが存在する。
2:ベクトルeで表される点の座標は、この座標系では(a, b)になる。つまり、点の座標値はa、bである。
3:aは、eとpとの内積、bは、eとqとの内積に等しい。
「1番目の性質は基底の定義、2番目の性質は座標の定義じゃな。3番目の性質は、線形結合の両辺とそれぞれp、qとの内積を取ることで導かれる」
ジンは、そう言って、正規直交座標系の性質の説明を終えた。
一息おいて、ジンは三角化で選ぶ座標系について解説する。
「三角化では、一本目の基底ベクトルpとして、行列の固有ベクトルを用いる。二本目の基底ベクトルqとしては、pと直交する単位ベクトルを選ぶ」
ジンの解説がよく理解できず、ソラは尋ねる。
「一本目の基底ベクトルpとして、例題の行列Aの場合、固有ベクトル(0.6, 0.8)を用いるのは分かります。でも、どうやって二本目の基底ベクトルqを決めるのですか?」
ソラの質問に答えるため、ジンは、平面上の点を表すベクトルeをp、qの線形結合で表す式を利用して、pからqを決める方法を説明する。ここで、eとしては、(1, 0)を用いる。
「さっき述べたように、線形結合におけるpの係数aは、eとpとの内積で求められる。そこで、e、引く、a掛けるp、が0でない場合、そのノルムをbとすれば、bで割ったベクトルとしてqが得られる。この手順でpからqを決める。qはpとの内積が0で、ノルムが1となるから、条件を満たす基底ベクトルじゃ」
ソラは、頭の中で直角三角形を描きながら、感想を述べる。
「要するに、eを斜辺、pの定数倍をもう一辺とする直角三角形において、残りの一辺を求める方法ですね、分かります」
ジンは、その通りじゃ、とソラを褒めた。
ソラは、ジンに懸念点を伝える。
「eがたまたまpの定数倍になっている場合は、qが決められないように思うのですが」
ジンは、嬉しそうな表情で答える。
「いい質問じゃな。その場合は、(0, 1)をeと置いて、再度同じ計算をすればよい」
ソラは、ジンが挙げた例題に対して、二本目の基底ベクトルqを計算し、(0,8, -0.6)を得た。
「確かに、pとqは内積が0になり、それぞれのノルムが1ですから、正規直交基底です」
ソラが報告すると、ジンは、そうじゃろ、と応じた。
ジンは、p、qが定める座標系で、行列Aによって平面上の点がどのように移されるかの解説を始める。
この座標系で(1, 0)という点は、元の座標系ではpとなる。従って、A掛けるp、がpであることから、(1, 0)という点は(1, 0)に移ることが導かれる。
一方、(0, 1)という点は、元の座標系ではqとなる。ジンは、この点がどこに移るかを述べる。
「A掛けるqは、平面上の点を表すベクトルじゃから、p、qの線形結合、すなわち、c掛けるp、足す、λ掛けるqの形に書ける。cとλは、それぞれ左辺とp、qとの内積で求められる。計算すると0.3、0.6。よって、(0, 1)という点は(0.3, 0.6)に移る」
ジンは、これら二つの結果をまとめる。p、qが定める座標系で、平面上の点(a, b)が移される点の座標を行列Rを使って表す。
1 0.3
0 0.6
「この行列Rを使うと、点(a, b)が移される点の座標は、R掛ける(a, b)になる。Rは上三角行列じゃから、元の行列Aよりも扱いやすい。例えば、(1, 0)が(1, 0)に移される。これが行列Aの三角化じゃ。p、qのことを三角化基底ベクトルと呼ぶ」
ジンの説明を受けて、ソラは二つの行列AとRの関係について尋ねる。
「AとRはどういう関係にありますか? 例えば固有値や固有ベクトルは同じになりますか?」
ジンは、AとRの関係を述べるため、二つのベクトルp、qに対して、それらを並べた行列(p, q)を導入する。(p, q)は、個々のベクトルの要素を縦一列に並べ、ベクトルの順番に従って、各列を横に並べた2掛ける2のサイズの行列である。
「行列(p, q)をUと置くと、要素を比較することで、A掛けるUは、U掛けるR、に等しいことが導かれる。Uは正則になることが示せる。これより、Aの固有値とRの固有値は一致し、Aの固有ベクトルはRの固有ベクトルにUを掛けたものになると分かる。つまり、Aの固有値は1と0.6じゃ」
以上で、例題の2掛ける2のサイズの行列Aに対して、三角化が可能なことが示された。
ここで、ソラは、正方行列の三角化に関して当然の質問をする。
「例題の行列Aに対する三角化は理解しました。でも、これは、2掛ける2のサイズで、かつ要素が実数で、固有値も実数という特別な行列ですよね。一般の正方行列に対する三角化はどうなるのですか?」
「nは正の整数とする。n掛けるnのサイズで、要素が複素数の一般の正方行列Aに対する三角化も、基本の考え方は同じじゃ。まずAの固有値と固有ベクトルを一組求め、それに基づいて正規直交座標系の基底を作る」
一息おいて、ジンは続ける。
「その座標系の基底ベクトルを並べた行列をUとすると、ある上三角行列Rがあって、A掛けるUは、U掛けるR、に等しくなる。このように、最終的な結果は、さっきの例題と同じ形になる。ただし、さっきの例題とは、UとRを求める処理において、三つの違いがある」
ジンは、三つの違いを箇条書きにした。
1:行列の要素が複素数なので、それに合わせて内積の定義を修正する。
2:ベクトルが多数現れ、与えられたベクトルから正規直交基底を作る処理が煩雑になるため、行列を用いて簡潔に表す。
3:行列の固有値計算を複数回行う。一回の固有値計算で、UとRの縦一列が求まる。
「全体の処理の流れとしては、正規直交基底を何度も作り直して、UとRを次第に求めていくことになるのお」
ジンは、一般の正方行列に対する三角化の概要説明をそう終えた。
「ここからは、これら三つの違いを具体的に説明するぞ。坊やもだいぶ線形代数に慣れてきたから、多少長い証明を出しても大丈夫じゃろう。ただ、この後の話は、一度ざっと聞いただけで分かるようなものではないから、すぐに理解できなくても落ち込まないようにな」
ジンの予告に、ソラは、はい、分かりました、と応じた。
「まずは、一つ目の違いである、複素数を要素とするベクトルの内積から始めようかの」
実数を要素とするベクトルでは、二つのベクトルの対応する要素を掛けて足し合わせたものを両者の内積、ベクトルの要素の絶対値の2乗を足し合わせたもののルートをそのベクトルのノルムと定める。従って、ベクトルの自分自身との内積は、そのベクトルのノルムの2乗に等しくなる。
ジンは、複素数を要素とする場合でも、実数の場合と同様に、ノルムが1のベクトルの自分自身との内積が1になるように内積を定めると述べ、その詳細を解説する。
「複素数に対して、虚部だけをマイナス1倍した複素数を複素共役と呼ぶ。複素数とその複素共役を掛けると、結果はその複素数の絶対値の2乗、すなわち実数になる。この性質を使って内積を定義する。つまり、内積を取る際に、一方のベクトルの各要素をその複素共役に変える」
「内積のどっちのベクトルを複素共役にするのですか?」
ソラが尋ねると、ジンは少し困った顔をした。
「流儀によるから、どっちとは言いにくいのお。ワシは、αが数、xがベクトルで、α、掛ける、xに対して、xとの内積を取ると言ったときは、後ろのxを複素共役にする派じゃ。こう決めると、内積はα、掛ける、xのノルムの2乗、に等しくなる」
ソラは、こういうところに流儀があるのは面白いですね、と返した。
「複素数を要素とするベクトルで、内積が0だから直交すると言われても、図に描けないので、直交のイメージが湧きません。平面上の線分の直交を抽象化、一般化したものと考えればいいんでしょうけど」
「そうじゃな。ドライに言えば、直交は内積が0の言い換えに過ぎない。じゃが、平面上の線分の直交のイメージがあると、内積を感覚的に把握しやすくなると思うぞ」
これで、複素数を要素とするベクトルの内積の説明が終わった。
「では、次は二番目の違いである、与えられたベクトルから正規直交基底を作る処理の説明を始めようかの」
一列に並べられた複数のベクトルが与えられたとき、個々のベクトルの要素を縦一列に並べ、ベクトルの順番に従って、各列を左から右に並べることで、複数のベクトルを一つの行列にまとめることができる。
複数のベクトルがまとめられた行列を用いて、正規直交基底を作る処理に必要な用語として、ジンは行列の転置と随伴を導入する。
「行列の転置とは、対角線で折り返して縦と横を入れ替えることじゃ。行列の随伴とは、転置して各要素の複素共役を取ることじゃ。複素共役転置と言うこともあるが、長いからここでは随伴と呼ぶことにする。随伴を使うと、複数のベクトルとの内積を取る操作を一つの随伴行列を掛ける操作で表せる」
ジンは、行列の随伴を使い、お互いに直交するm本の単位ベクトルを元に、それらと直交する単位ベクトルを順番に追加して、正規直交基底を作る処理の解説を始める。ただし、mはn未満の正の整数である。
ジンは、与えられたm本のベクトルを並べた行列をP、k番目の要素だけが1でそれ以外が0のベクトルをeと書いた。Pのサイズはn掛けるm。kは最初は1である。
「eを使って、追加する新しいベクトルを作る。そのために、Pの随伴、掛ける、e、をaと置き、e、引く、P、掛ける、aを計算する。このベクトルのノルムbが0でなければ、bで割ってqと置く。qは単位ベクトルで、与えられたすべてのベクトルと直交するから、条件を満たす。qをPの右端の縦一列に追加して、この処理を繰り返す」
ソラは、ノルムbが0の場合、どうするのか、尋ねた。
ジンは、こともなげに、kに1を足して繰り返すのじゃ、と答えた。
ジンは、この処理の終了時にどうなるかを述べる。
「kがnで終了じゃ。PをLDU分解することで、終了時のPのサイズがn掛けるnになることが示せる。定義から、Pの随伴、掛ける、P、は単位行列になり、Pは正則じゃ。任意のベクトルxは、Pに並べられたn本のベクトルの線形結合で表すことができる。従って、Pに並べられたn本のベクトルは、正規直交基底じゃ」
一息おいて、ジンはユニタリ行列について補足する。
「随伴を掛けると単位行列になる正方行列をユニタリ行列と呼ぶ。終了時のPはユニタリ行列じゃ。一般に正規直交基底ベクトルをすべて並べた行列は、ユニタリ行列じゃ。逆に、ユニタリ行列はつねに一つの正規直交基底を定める」
これで、一般の行列の三角化における二番目の違いの説明が終わった。
「三番目の違いに行こうかの。2掛ける2のサイズの行列のときは、固有値の計算は一度で済んだ。一般の行列では、固有値の計算を繰り返し行い、三角化基底ベクトルを一本ずつ求めていく」
ジンは、そう言った後、三角化基底ベクトルの作り方の手順の説明を始める。
まず、対象とする正方行列Aの固有値と単位固有ベクトルを一組求め、一本目の基底ベクトルとして、その固有ベクトルを用いる。
ジンは、固有ベクトルの要素を縦一列に並べたn掛ける1のサイズの行列をU、対応する固有値を要素とする1掛ける1のサイズの行列をRと書いた。
「この後、新しい基底ベクトルを、一本ずつUの右端に順番に追加していく。この処理をn掛けるnのサイズになるまで続ける。一方、Rに対しては、まず下端に横一行すべて0を追加し、その後、右端に、対応するベクトルを追加する。処理のどの段階であっても、以下の三つの性質が成り立つように、追加するベクトルを選ぶ」
ジンは、各段階でUとRが満たすべき三つの性質を挙げる。
性質1:Rは上三角行列で、そのサイズは、Uの横のサイズ、掛ける、Uの横のサイズ
性質2:Uの随伴、掛ける、U、は単位行列
性質3:A掛けるUは、U掛けるR、に等しい
「1掛ける1のサイズの行列は、対角要素の左下がないから、つねに上三角行列。1掛ける1のサイズで、要素が1の行列は単位行列じゃ」
ジンが補足すると、ソラは、なるほど、一本目の基底ベクトルの段階ではこれら三つの性質は成り立っていますね、と応えた。
二本目以降の基底ベクトルをどう作るかが問題となる。ジンは、まず作り方のアイデアをソラに紹介する。
「途中の段階では、Uに並べられたベクトルの線形結合としては表せないようなベクトルが存在する。そういったベクトルに対して、対象とする正方行列Aがどう振る舞うかを示すサイズが小さい正方行列Bを作り、その行列の固有値と固有ベクトルを求めて、UとRに追加するベクトルを作成するという流れじゃ」
ジンは、Uに並べられている基底ベクトルから、一旦、正規直交基底を作り、この際に、追加されるベクトルを並べた行列をVと書いた。つまり、UとVに並べられているベクトルを一つにまとめて並べた行列である(U, V)はユニタリ行列になる。ジンは、Vを使い、具体化したアイデアを述べる。
「Vの随伴、掛ける、A、掛ける、VをBと置く。Bは正方行列じゃ。Bの固有値と単位固有ベクトルを一組求めて、それぞれλ、xとする。V掛けるxをqと置く。qがUに追加する新しい基底ベクトルじゃ」
ジンは、続けて、Rに追加するベクトルを説明する。
「Uの随伴、掛ける、A、掛けるq、をcと置く。qの定義と(U, V)がユニタリ行列であることから、A掛けるqが、U掛けるc、足す、λ掛けるq、に等しくなると分かる。じゃから、Rに追加するベクトルとして、cの要素とλを連結したベクトルである(c, λ)を選べば、さっきの三つの性質が保たれる」
ジンは、処理の終了時にどうなるかを述べる。
「こうして、行列Uの横のサイズをだんだん大きくしていくのじゃ。Uのサイズがn掛けるnになったら終了。よって、Uはユニタリ行列になる。Rは上三角行列で、A掛けるUは、U掛けるR、に等しくなる。Uは三角化基底ベクトルをすべて並べた行列じゃ」
これで、一般の正方行列の三角化がつねに可能であることが示された。
「こんな長い証明で示されることが、感覚的に当然に思えないといけないのですか。数覚スキルを伸ばす訓練の道のりは遠いです」
ソラが弱音を吐くと、ジンは諭すように語り掛ける。
「証明とは、こうなるはずという感覚を清書したものじゃ。三角化が視えれば自明となる。だが、一度、話を聞いただけでできるはずはなかろう。自分で手を動かして確認したり、他の問題に応用したりしているうちに、段々と身に付くものじゃ。今のところは、固有値と固有ベクトルを使って正規直交座標系の基底を作る処理と思っておけばいいじゃろう」
ソラは、はい、あせらず理解するようにします、と返した。
ジンは、講義の最後に思い出したように、行列の三角化とペロン・フロベニウスの定理の関係について補足する。
「三角化すると、元の行列の固有値が対角要素に並ぶが、同じ値が複数現れることもある。しかし、ペロン・フロベニウスの定理の条件を満たす行列では、絶対値最大の固有値は、対角要素に一度しか現れないことが保証される。つまり、他の対角要素の絶対値は、それよりも必ず小さくなる」
「そんなことまで保証するなんて、ペロン・フロベニウスの定理ってすごいですね。さすが必殺技です」
ソラが定理について感想を述べると、ジンは、そうじゃろ、と少し得意そうに応じた。
行列の三角化の講義は、こうして終了した。




