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

问题描述

im试图绘制随机生成的邻接矩阵的特征值以获得看起来像高斯分布的特征,试图改变并固定生成图的可能性,并尝试按频率绘制最大特征值,但是我不确定如何做这两个,这是我的代码

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,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()

enter image description here