1から9までの数字を一回ずつ使った3×3の行列のうち、固有値がすべて整数になる組み合わせ

1から9までの数字を一回ずつ使った3×3の行列のうち、固有値がすべて整数になる組み合わせは何通りあるか、が気になったので計算してみました。

正直なところ、誰がこの情報を必要とするのか分かりませんが、せっかく計算したので結果を置いておきます。もしかしたら、試験問題を作る高校や大学の先生とかの中には、こういう情報を求めている人がいるかも知れませんね。

まずやったことは、行列の列挙です。1から9までの数字を一回ずつ使いたいので、順列を生成しました。pythonだと一行で出来てしまいます。素晴らしいですね。

itertools.permutations( range(1,10), 9 )

9個の数字の順列ですので、9の階乗で362,880通りの行列ができあがります。

そして、固有値の計算です。これもpythonを使えば、

固有値, 固有ベクトル = np.linalg.eig(x)

の一行です。まったく、便利な世の中になったものです。

一般には固有値は複素数になりますので、まずはその確認をしました。362,880個の行列のうち、固有値がすべて実数になるのは253,668通りでした。全体の約70%で、思ったよりも多いなあという印象です。

最後に固有値が整数かどうかのチェックを行って完了です。全部で206通りの行列が残りました。これはまあこんなもんでしょう。以下にその一覧を示します。

3×3の行列ですが、それを1行にした形で書いています。その右に書いてあるのが固有値です。

詳しいことは知りませんが、最大固有値の値を見ると、14、15、16の3通りしかありません。何か理屈があるのでしょう。数字の並びについては、これといった法則は見えませんでした。何か知っている人は教えてくれるとうれしいです。