n×n矩阵的特征值与特征值个数(n)的关系

2024-10-05 14:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用python编写一个脚本,生成2到10的偶数秩矩阵(以2为步)并计算其特征值。我成功地做到了。我能够生成元素a穿过主对角线,元素b位于主对角线之外的对角线上的矩阵,并计算特征值:

import numpy as np
import matplotlib.pyplot as plt

def Huckel(a,b):
    for n in range(2,10,2):
         huckel_matrix = np.zeros(shape(n,n))
         np.fill_diagonal(huckel_matrix,a)
         huckel_matrix[np.arange(n-1),np.arange(1,n)] = b
         huckel_matrix[np.arange(1,n),np.arange(n-1)] = b
         eigen_values = np.linalg.eigvalsh(huckel_matrix)
Huckel(0.0,-1.0)

但是,我还想根据相应nxn矩阵(x轴)的秩(给定a=0.0和b=-1.0)散点绘制这些特征值(y轴)。所以,我想写一行,取特征值,把它们散点到对应矩阵的秩(2,4,6,8)上,但我不知道怎么做。你知道吗

我对Python非常陌生,我不确定如何实现这一点。我认为它应该写在for循环中,但我不知道怎么写。希望有人能帮我。你知道吗


Tags: import脚本元素forasnp矩阵matrix
2条回答

我想在这里要小心,因为我不完全理解你想要的输出背后的数学,然而,你没有做任何与你的计算。我已经修改了你的代码来存储你的结果,然后你可以根据自己的喜好来绘制。你知道吗

import numpy as np
import matplotlib.pyplot as plt



def Huckel(a,b):
    huckle_out = []
    for n in range(2,10,2):
        huckel_matrix = np.zeros(shape= (n,n))
        np.fill_diagonal(huckel_matrix,a)
        huckel_matrix[np.arange(n-1),np.arange(1,n)] = b
        huckel_matrix[np.arange(1,n),np.arange(n-1)] = b
        eigen_values = np.linalg.eigvalsh(huckel_matrix)
        huckle_out.append(eigen_values)
    return huckle_out


my_huck = Huckel(0.0,-1.0)

返回一个列表:

Out[27]: 
[array([-1.,  1.]),
 array([-1.61803399, -0.61803399,  0.61803399,  1.61803399]),
 array([-1.80193774, -1.2469796 , -0.44504187,  0.44504187,  1.2469796 ,
         1.80193774]),
 array([-1.87938524, -1.53208889, -1.        , -0.34729636,  0.34729636,
         1.        ,  1.53208889,  1.87938524])]

如果我理解正确的话,你需要一个散点图,其中特征值在y轴上,特征值的个数在x轴上。你知道吗

import numpy as np
import matplotlib.pyplot as plt


def Huckel(a,b):
    res = []
    for n in range(2,10,2):
        huckel_matrix = np.zeros((n,n))
        np.fill_diagonal(huckel_matrix,a)
        huckel_matrix[np.arange(n-1),np.arange(1,n)] = b
        huckel_matrix[np.arange(1,n),np.arange(n-1)] = b
        eigen_values = np.linalg.eigvalsh(huckel_matrix)
        res.append(eigen_values)
    return res


fig, ax = plt.subplots()
for eigval in Huckel(0.0,-1.0):
    ax.plot([eigval.size] * eigval.size, eigval, 'bo')

Eigenvalues by matrix size

相关问题 更多 >