ランダム行列で遊んでみる

ランダム行列というのは成分がランダムに与えられる行列のことです。
ランダム行列で普通問題になるのは、ランダムに生成された行列の固有値がどのように分布するか、
という問題のようです。

おもしろそうなので R を使って実験してみました。

1000次元の正方行列を考えて各要素は独立に標準正規分布に従うとします。
こうしてできる行列は実非対称な行列になります。

これを R で書くと

A=matrix(rnorm(1000000),nc=1000)
Eigen=eigen(A)
plot(Eigen$value,xlab="Re",ylab="Im")
title("Eigen value of real\nnonsymmetric 1000x1000 matrix")

となります(簡単!)。

以下が結果です。
不思議なことに円状に固有値が分布します。また、実軸に対して上下に対称に分布していることがわかります(これは固有方程式が実係数になるので、複素数解は必ず共役を解に持つ、ということから明らかですね)。

randommatrix.png

ちなみに 500 x 500 の行列では次のようになります。

randommatrix2.png

1000 x 1000 のときは半径がおよそ30だったのにたいして、500 x 500 では 20 くらいになっていますね。図を見ると、固有値の密度自体は変化せずに、範囲が拡大していくように見えます。仮にそうだとすると、500 → 1000 に次元が増えたときは固有値の数が 2 倍になるので半径は\sqrt{2}倍になるということになるので、実験結果とも一致します。この次元と半径のスケーリング則が正しければ 250 x 250 のときの半径はおよそ 14 という予想ができます。やってみましょう。

randommatrix3.png

だいたい正しそうですね。面白いですね。いつかまじめに勉強してみたい分野です。

ランダム行列のほかの特徴量はどうなっているのでしょうか?たとえば、ノルム、条件数、ランク(これは確率1でフルランクになりそう)などなど。