如何绘制随机生成矩阵的最大特征值?

How do i plot the largest eigenvalues for randomly generated matrix?

我正在尝试绘制随机生成的邻接矩阵的特征值以获得看起来像高斯分布的东西,我正在尝试更改和固定生成图形的概率并按其频率绘制最大特征值,但我不是确定如何执行这两个操作,这是我的代码:

import numpy as np
import random
import matplotlib.pyplot as plt
import scipy.linalg as la

print("Please input the amount of times you want to repeat this: ")
userInput = int(input())
print("This will repeat {} times".format(userInput))
print("--------------------------------------------")
largestEig = []


for x in range(userInput):
    n = 3
    print("Random number is: {}".format(n))
    adjMatrix = np.random.randn(0,2,(n,n))
    np.fill_diagonal(adjMatrix, 0)
    i_lower = np.tril_indices(n, -1)
    adjMatrix[i_lower] = adjMatrix.T[i_lower]
    eigvals, eigvecs = la.eig(adjMatrix)
    m = max(eigvals)
    largestEig.append(m)
    print("For {}, M = {}".format(n, m))
    
    print(adjMatrix)
    
print("---------------------------------------------")
print("The List:")
print(largestEig)



plt.plot(largestEig)
plt.show()

尝试 运行 您的代码时,我在生成矩阵的行中遇到错误。

我假设您想创建一个具有随机值的方阵。

在这种情况下,您可能需要查看 np.random.uniform:

n=3
adjMatrix = np.random.uniform(0,10,(n,n)) 

对于分布图,您可能需要查看 plt.hist():

plt.hist(largestEig, bins=50)

添加这些更改,并删除输入和打印语句得到:

largestEig = []

userInput=10000
for x in range(userInput):
    n = 3
    adjMatrix = np.random.uniform(0,10,(n,n))
    np.fill_diagonal(adjMatrix, 0)
    i_lower = np.tril_indices(n, -1)
    adjMatrix[i_lower] = adjMatrix.T[i_lower]
    eigvals, eigvecs = la.eig(adjMatrix)
    m = max(eigvals)
    largestEig.append(m)



plt.hist(largestEig, bins=50)
plt.show()