半円則
Johnson-Lindenstrauss Lemmaというのを知る。
見た資料はこれ。
http://www-personal.umich.edu/~romanv/slides/2011-Edmonton/2011-Edmonton.pdf
Octaveで適当にSemiCircular Law, Circular Lawを確認する為のコードを書いた。多分matlabでも使えると思う。
実行するとこんな感じ。
これは要素数が1000の場合。この要素数でも綺麗に形が現れているのが分かる。下の方に要素数が2000,3000の時も載せておく。尚、スケーリングとかそこら辺は適当なので詳細は論文等を読んで下さい。
面白いのは行列に手を加えた時。以下のコードのように、対角要素に値を加えた時
matrix_size=4000,divide_size=3
matrix_size=4000,divide_size=4
個人的にはこういう操作が可視化できて面白い気がする
後は、例えばA(i,i) += 100*j;の部分を
・A(i,i) += 1000*j or A(i,i) += 10*j
・A(i,i) += 100*randn();
にするとどうなるか、とか遊んでみるのも楽しいかもです
要素数=2000
要素数=3000