Why does rand(Complex{Float64},N,N) always host a large eigenvalue?

rand(Complex{Float64},N,N) has a single huge eigenvalue:

1000-element Vector{ComplexF64}:
-12.783541578066096 + 0.3846555290226826im
-12.640629292870221 + 0.3298358788214941im
-12.532390460903775 - 0.46833512398154803im
-12.459788998105303 + 1.113287252539131im
-12.452489527516653 - 2.039160255046849im
-12.443376914758154 - 2.925644416942232im
-12.393962751225697 + 1.827442865761199im
-12.21577397740427 + 2.48209880504993im
-12.18035513756151 - 0.8308178948089163im
-12.157914449384542 - 4.39763822583169im
-12.037663328349527 - 1.806797607892722im
-12.001941198850092 - 2.861542689617668im
-11.845132403335526 - 2.341019177207625im
                 ⋮
12.059358173936465 + 2.728121895544298im
12.109258420004062 + 1.5128414654366307im
12.135239718068897 - 2.062951596259147im
12.15156569998422 - 1.2459726567878262im
12.262942571754591 - 0.3210502647087754im
12.473276584132341 - 3.0964443760038503im
12.55187988436963 - 1.8684402457440312im
12.580082975237778 + 0.37420966041519665im
12.582963021071704 + 1.6221890206858443im
12.781885519945197 + 1.3261513324308098im
13.107702546162532 - 0.4953167922362639im
500.0581564013265 + 499.64264644759334im

while randn(Complex{Float64},N,N) does’t:

1000-element Vector{ComplexF64}:
-32.03190369540298 - 1.021124704203545im
-31.25037181126734 + 1.6706297262077292im
-30.849959722048567 + 4.808570906059727im
-30.74847283052719 - 2.421384759575872im
-30.435820834012763 + 3.1544657431612655im
-30.21689882140621 - 4.257890528423566im
-29.792596188554295 - 7.948673632966644im
-29.72885166118967 - 6.646498990913658im
-29.61741973823818 + 4.409689549561226im
-29.413288893920818 - 1.4688722425883955im
-29.185115459031888 - 5.105562827107809im
-28.99795793964071 + 10.565749894958277im
-28.959794351803005 + 8.84663906232798im
                 ⋮
29.637119769134742 + 1.7747797390022835im
29.64475669109157 - 3.107789813201521im
29.754489040492917 - 7.938671875796023im
30.134691033235253 + 8.380873056348637im
30.15030836158512 - 5.538184715479133im
30.387025328170296 - 1.5810731035145962im
30.47010759397889 - 8.128635824692617im
30.541207455516442 - 2.032112764126824im
30.61481557931758 + 6.576703100185952im
30.850048685546025 - 4.751913606982873im
31.146085197307997 + 3.0681199433704918im
32.08640759209385 + 0.4501218828756134im

Both cases show the circular law of random matrices, but why dose rand(Complex{Float64},N,N) contain a big eigenvalue far from the law?
Here I took N=1000 and computed them on Julia 1.8.1.

That’s because you are using rand and not something like randn with zero mean. rand produces numbers sampled uniformly from [0,1] (in both real and imaginary parts for rand(ComplexF64)), which nonzero mean 0.5 (in both real and imaginary parts). So, you get a large eigenvalue corresponding to this mean component — hence a value of about (m + im)/2 for an m \times m matrix.

1 Like

Why does only one large eigenvalue appear, and not more than two?

This question is a gateway into an entire field of math (Random matrix theory) https://arxiv.org/pdf/1712.07903 is a pretty good high level overview (page 15 specifically deals with the expected distribution here).

4 Likes

From page 15, I understand why the Gaussian distribution doesn’t allow for big eigenvalues far from the origin. However, I’m still uncertain about the uniform distribution.

Because the mean is described by a rank-1 matrix.

Let A = rand(m,m), and o = ones(m) (the vector of 1’s). Then A - oo^T/2 has zero mean, and the expected value E[A] = oo^T/2 has 1 eigenvalue of m/2 and m-1 eigenvalues of 0. The actual eigenvalues of A are distributed around these two possibilities. Similarly for the complex case.

(Caveat: I have never properly studied random-matrix theory, so I’m just going off a back-of-the-envelope understanding. @alanedelman is the expert here.)

6 Likes