行列と初めて向き合う。
高校の数学で嫌いだったのが、行列だ。
こじつけのようなルールに従って退屈な計算を繰り返すばかりで、何をしたいのかサッパリ判らない。まさに穴を掘って埋める的な拷問と思った。昔から僕は暗算が嫌いだ。遅いうえに必ず間違え、自分の注意力のなさに嫌気がさす。
だが、僕がPython習得でぼんやりと目指すAI・機械学習に、行列は欠かせないというではないか。
そんな折、CheckiOの課題で思いがけなく行列を使う場面に出会った。
僕が好きなゲーム"MYST"に出てきそうな、回転型からくり仕掛けの御守りを想定に、3×3の二次元配列データを拾い上げながら狙い通りに作動させるミッション。突き詰めていくとそれは三つの連立方程式を考えることだった。こんなやつ。
ax + by + cz = P
dx + ey + fz = Q
gx + hy + iz = R
まず普通にこの方程式を解いていこうと思ったが、係数が変数のままだととんでもないことになり途中で断念(やり方がまずかったのもある)。早々に諦めてググる。
すると、ちゃんと公式がある。方程式はふつう公式を使って解くことはないから意識になかった。この連立方程式は3次の行列式として表すことができ、非常にスッキリとしたものになる。
そしてこの場合の x, y, z は、ある条件下で次のような解を持つ。
クラーメルの公式というらしい。高校で習った気もするが全く覚えていなかった。
見た目はシンプルでも行列の計算式は相変わらず膨大であり、書き写すのも大変なので公式をそのままコードとしてコピペし、間違いを防ぐため変数名もコピー元に合わせた。こうして、ブラックボックスを移植したプログラムが完成した。
判ってしまえば、出題者もこれを行列の問題として位置づけていたことに気づいたし、比較的簡単な問題だったかもしれないが、僕は初めて行列という概念に関わった課題を解いたことが嬉しかった。未だ行列の存在目的はよく分かっていないけれども。
そして賢者のコードを見る。
長々としたクラーメルの計算式がどこにも見当たらず、数行で完成させている。どうなってるんだ。
再び打ちひしがれた。
この記事が気に入ったらサポートをしてみませんか?