我想画一个矩阵的两个第一特征值之差的彩色图。为了做到这一点,首先我定义了一个有两个参数“x”和“y”的符号矩阵。然后我得到特征向量和特征值(简称),并计算两个第一特征值之间的间隙。最后(我认为问题出在这里…)我制作了一个由点X和Y组成的网格,用函数“能量间隙(X,Y)”来评估它,将结果存储在Z中,然后用这个来绘制图,但是它不起作用……知道为什么吗?在import numpy as np
import numpy
import matplotlib.pyplot as plt
from sympy.utilities.lambdify import lambdify
from sympy import symbols
x = symbols("x")
y = symbols("y")
matrix = [[x+2, x,y],[y**2,x,3],[y+4,2,1]]
simbolic_matrix = lambdify((x,y), matrix,'numpy')
def eigen_system(x,y):
values, vectors = numpy.linalg.eig(np.array(simbolic_matrix(x,y)))
values_short = np.sort(values)
vectors_short = vectors[:,values.argsort()]
return values_short , vectors_short
def energy_gap(x,y):
values , vectors = eigen_system(x,y)
gap = abs(values[1])-abs(values[0])
return gap
def plot_energy_gap():
x = np.arange(1.1, 3.0, 0.1)
y = np.arange(1.1, 3.0, 0.1)
X, Y = np.meshgrid(x, y)
Z = energy_gap(X,Y)
im = plt.imshow(Z, cmap=plt.cm.RdBu,extent=(1.1,3,1.1,3))
plt.colorbar(im)
plt.show()
plot_energy_gap()