0

I am currently working on a problem that has to do with the generalized version of circular law called ellipse law. Basically, it means that for a N*N Random Matrix M with elements A_{ij} taken from a gaussian distribution N(0,1) with a correlation c between A_{ij} and A_{ji} and futhermore normalized as M_{ij} = A_{ij}/sqrt{N}, the complex eigenvalues are uniformly distributed inside a circle with real and imaginary axes corresponding to 1+c and 1-c respectively. I tried to programm (Python) for 500 * 500 Matrix, but the real axis is always greater than 1+c (See figure). I would really appreciate the help. I am really stuck with the problem. Since the correlation is 0.5, the convergence radius should have been 1.5 and 0.5 for real and imaginary axes respectively. But there is a clear nonconvergence.

I tried to create the correlated matrix in this way, then plot the eigenvalues of C. Thankyou very much for the help.

def create_corr_matrix(n, corr, zeta):
    A = np.random.normal(0, 1, (n, n))
    np.fill_diagonal(A, 1)  # set diagonal elements to 1
    print(A)
    for i in range(n):
         for j in range(n):
             if np.abs(A[i][j])<zeta:
                 if corr=='p':
                    A[i][j] = A[j][i]
                 elif corr=='n':
                      A[i][j] = -A[j][i]
                 else:
                    A[i][j] = A[j][i]
                   
                
    return A


A=create_corr_matrix(n,corr,zeta)
C=A/np.sqrt(n)
Amir reza Riahi
  • 1,540
  • 2
  • 8
  • 34
Uran Kopf
  • 1
  • 2
  • Are you sure you're generating these matrices correctly? Because you talk about a correlation c between A[i][j] and A[j][i] but this isn't implemented in your code. If you want to generate normally distributed random variables with a specified covariance matrix you need to use something like `numpy.random.multivariate_normal` – Matthew Towers Apr 26 '23 at 09:53
  • Not about your problem per se, but just something I noticed: You `if` and `else` block do the same thing. You could shorten your code by 2 lines by having your `elif` condition first, then only having an `else` block. – white Apr 26 '23 at 09:56
  • Hi Matthew, Thanks for the comment. No, i am not actually sure if the generated matrix is correct. But the criteria of the problem is that if Aij < correlation , Aij == Aji else Aij = random. – Uran Kopf Apr 26 '23 at 10:05

0 Answers0