ランダム行列の固有値
ほー「ランダム行列の固有値のほうは、お互いにあまり近づきたくない様子がみてとれて、結果的に無作為な点より等間隔に並んでいるように見えるのです。」 Now Browsing:『素数に憑かれた人たち』 | TETRA'S MATH http://bit.ly/JDEz0Z
(https://twitter.com/#!/utatakiyoshi/status/194800793570906113)
について,実験してみました.
4,000個の32*32ランダム行列を作って固有値を求め,その間隔をヒストグラムにします.
結果はこのとおり.
比較用に,(-15~15の一様乱数を32個とってきたものの間隔たち)*4000回分 もヒストグラムにしてみました.
一様分布の間隔はたぶん指数分布だと思います(ちゃんと示してない).0付近の頻度が一番多い.
対して,ランダム行列の方は0付近で明らかに下がっています.確かにより等間隔に近そう.
ネタ元リンクにはゼータ関数とかの話が載ってますが,僕はよく知らないのでパス.
以下ソースコードです.
いま個人的に流行っているR言語を使ってみました.
逆にR言語を使いたかったがために実験してみた,という感じ.
正規分布に従う乱数がrnorm(個数,平均,標準偏差)で生成できるとか,
ヒストグラムがhist(リスト)で書けたりして大変楽しい.
#ランダム行列の固有値の間隔 result<-c() for(case in 1:4000){ msize <- 32 #32*32のランダムなエルミート行列を作る rmtrx <- matrix(rnorm(msize*msize,0,1),msize,msize) imtrx <- matrix(rnorm(msize*msize,0,1),msize,msize) rmtrx[lower.tri(rmtrx)]<-0 imtrx[lower.tri(imtrx,diag=TRUE)]<-0 mtrx <- rmtrx + 1i * imtrx mtrx <- mtrx + Conj(t(mtrx)) #固有値を求め,間隔をresultに追加する res <- Re(eigen(mtrx)$values) result<-append(result,diff(sort(res))) } #4000回分をヒストグラムに表示 hist(result,breaks=seq(0,10,by=0.2))
#一様分布の間隔 result<-c() for(case in 1:4000) { msize <- 32 #-15~15の一様乱数から32個取り,間隔をresultに追加 res<-sort(runif(msize,-15,15)) result<-append(result,diff(res)) } #4000回分をヒストグラムに表示 hist(result,breaks=seq(0,10,by=0.2))