ランダム行列の固有値の円則

昨日に引き続き、数セミ2019年2月号から。

今日は白井朋之さん(九州大学IMI)の記事「ランダム行列から行列式点過程へ」から。 昨日はGUEを考えたが、今回はもう少し一般的なランダム行列であるGinibreランダム行列を考える。 数セミでは、まずGinibreランダム行列を定義し、GUEはこれの特殊形になっていることを示す。 そのあと、固有値分布がどうなっているか調べる。

以下に概略を書いておく。

Ginibreランダム行列

複素確率変数\( Z \)の確率密度関数が、 \begin{align} f(z) = \pi^{-1} e^{-|z|^2} ,(z \in \mathbb{C}) \end{align} のときに、\( Z \)は複素標準正規分布\( Z \)に従う。すなわち、\( Z \sim N_{\mathbb{C}}(0,1) \)。

\( Z = X + iY\)と書くと、\( X, Y \overset{i.i.d.}{\sim } N_{\mathbb{R}}(0, \frac{1}{\sqrt{2}} )\)1

で、Ginibreランダム行列とは、各成分が上記の複素確率変数\(Z\)のランダム行列のこと。 すなわち、それを\(G\)とし、行列サイズを\(p \times p\)とすると以下の\(i,j\)成分をもつ行列のこと。

\begin{align} G_{ij} \overset{i.i.d.}{\sim } N_{\mathbb{C}}(0,1) \hspace{0.3cm}(i,j = 1,2, \cdots ,p) \end{align}

で、\(p \times p\)のGinibreランダム行列のアンサンブルをGinibre(p)とすると、 \( G \sim Ginibre(p)\)に対して、

\begin{align} Z_{\theta} = G\cos\theta + G^\ast \sin\theta \end{align}

と定義する。\(G^\ast\) は\(G\)のエルミート共役。 このとき、\( k \in \mathbb{Z}\) に対して、\( \theta = k \pi /2 \)のときに Z_{\theta}は\(G\)と同分布であり、 \( \theta = ( k + 1/4 ) \pi \)のときに\( Z_{\theta} \)はエルミート行列、すなわちGUEとなる。

ここからが本題で、まずはGの固有値分布に興味がある。

Ginibre(p)の固有値分布

  • 複素平面上の半径\( \sqrt{p}\)に一様に分布する

このとき、固有値のほとんどが半径\(\sqrt{p}\)の円内に存在する。したがって固有値の密度は概ね\(1/\pi \)になる。 \( p \rightarrow \infty \)のときにランダムに密度\(1/\pi \)で分布する。これをGinibre点過程という。

以下のような感じ(数セミP27図1に対応)。

f:id:mytache:20190213035037p:plain

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

ps = [100, 400, 900]
for idx, p in enumerate(ps):
    Z =np.random.normal(0,1/np.sqrt(2),p*p).reshape(p,p) + 1j*np.random.normal(0,1/np.sqrt(2),p*p).reshape(p,p)
    ev, _ = np.linalg.eig(Z)
    axes[idx].scatter(ev.real, ev.imag,s=5)
    axes[idx].set_title('p=' + str(p))
    axes[idx].set_xlabel('Re')
    axes[idx].set_ylabel('Im')
    axes[idx].grid(True)
    

GUE(p)の固有値分布

Ginibre行列のときに円内に分布していた固有値が全て実軸上に落ちてくるような感じ(下図左)。 よって原点近傍ほど密度が高くヒストグラムを書くと区間\( [-2\sqrt{p}, 2\sqrt{p}]\)の半円内に分布しているような現象が確認できる。 これが有名なWignerの半円則と呼ばれる現象である(下図右)。 同様に\( p \rightarrow \infty \)のときには実軸上にランダムに分布する。これをsine点過程という。

以下のような感じ(下図の右が数セミP27図2に対応)

f:id:mytache:20190213040742p:plain

p=400
Z =np.random.normal(0,1/np.sqrt(2),p*p).reshape(p,p) + 1j*np.random.normal(0,1/np.sqrt(2),p*p).reshape(p,p)

k=1
theta=(k+1/4)*np.pi

Z_theta = Z*np.cos(theta) + np.conjugate(Z.T) * np.sin(theta)
ev_theta, _ = np.linalg.eig(Z_theta)

fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(8,4))

# GUEの固有値の複素平面上の分布 (全て実数固有値なので実軸上に分布)
axes[0].scatter(ev_theta.real, ev_theta.imag, s=5)
axes[0].set_title('p={}, k={}'.format(p,k))
axes[0].set_xlabel('Re')
axes[0].set_ylabel('Im')
axes[0].grid(True)

#  GUEの固有値ヒストグラム
axes[1].hist(ev_theta.real, bins=40)
axes[1].set_title('p={}, k={}'.format(p,k))
axes[1].set_ylabel('count')
axes[1].grid(True)

ちなみに、上記で、

k=1
theta=(k/2)*np.pi

とすると、Ginibre(p)と同じような絵が得られる(下図)。

f:id:mytache:20190213041624p:plain

さらに、

k=0.5
theta=(k+1/4)*np.pi

とすると、想像どおり、固有値は純虚数だらけになる。

f:id:mytache:20190213041853p:plain

ランダム性と斥力の関係?

\( p \rightarrow \infty \)の極限におけるランダム性は、前回取り上げた香取さんの記事における固有値間の斥力相互作用の帰結と解釈できるだろうか?

うーん、おもしろい。

次回は白井さんの記事の本題である行列式点過程を理解してまとめてみる。

私からは以上です。


  1. セミ本文P.26の右カラム1行目には\(N_{\mathbb{R}}(0, \frac{1}{2} )\)とあるけど、おそらく誤植だと思う。