如何评估并绘制非厄米矩阵特征值?两能级系统Python建模
非厄米两能级系统特征值演化的Python建模思路
核心步骤与代码实现
1. 依赖库导入
首先导入必要的数值计算和绘图库:
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D
2. 哈密顿量构造与特征值计算
针对给定的非厄米哈密顿量:
H = [[a1 + i * gamma, g],[g, a2 + i * kappa]]
编写逻辑构造矩阵并计算特征值:
- 用
numpy.array构造复矩阵 - 调用
np.linalg.eigvals()直接求解特征值(非厄米矩阵无需特殊处理) - 分离特征值的实部(对应能级位置)和虚部(对应衰减/增益速率)
3. 参数扫描与可视化
根据需求选择单参数或双参数扫描,绘制特征值演化曲线/曲面:
单参数扫描示例(以a1为例)
固定其他参数,遍历a1的取值范围,绘制特征值实部、虚部随a1的变化:
# 固定参数 a2 = 0.0 g = 1.0 gamma = 0.5 kappa = 0.3 # 定义a1的扫描范围 a1_vals = np.linspace(-5, 5, 100) # 初始化存储特征值实部、虚部的列表 eig_real1, eig_imag1 = [], [] eig_real2, eig_imag2 = [], [] for a1 in a1_vals: # 构造哈密顿量 H = np.array([[a1 + 1j*gamma, g], [g, a2 + 1j*kappa]]) # 计算特征值 eig_vals = np.linalg.eigvals(H) # 按实部排序,避免绘图时曲线交叉混乱 sorted_eig = sorted(eig_vals, key=lambda x: x.real) # 存储实部和虚部 eig_real1.append(sorted_eig[0].real) eig_imag1.append(sorted_eig[0].imag) eig_real2.append(sorted_eig[1].real) eig_imag2.append(sorted_eig[1].imag) # 绘制特征值实部演化曲线 plt.figure(figsize=(10, 6)) plt.plot(a1_vals, eig_real1, label='特征值1实部') plt.plot(a1_vals, eig_real2, label='特征值2实部') plt.xlabel('a1') plt.ylabel('特征值实部') plt.legend() plt.title('特征值实部随a1的演化') plt.grid(True) plt.show() # 绘制特征值虚部演化曲线 plt.figure(figsize=(10, 6)) plt.plot(a1_vals, eig_imag1, label='特征值1虚部') plt.plot(a1_vals, eig_imag2, label='特征值2虚部') plt.xlabel('a1') plt.ylabel('特征值虚部') plt.legend() plt.title('特征值虚部随a1的演化') plt.grid(True) plt.show()
双参数扫描示例(以a1和g为例)
生成a1和g的参数网格,绘制特征值实部/虚部的3D曲面图:
# 固定参数 a2 = 0.0 gamma = 0.5 kappa = 0.3 # 生成参数网格 a1_vals = np.linspace(-5, 5, 50) g_vals = np.linspace(0, 3, 50) A1, G = np.meshgrid(a1_vals, g_vals) # 初始化存储特征值的数组 eig_real1 = np.zeros_like(A1) eig_imag1 = np.zeros_like(A1) eig_real2 = np.zeros_like(A1) eig_imag2 = np.zeros_like(A1) # 遍历网格计算特征值 for i in range(A1.shape[0]): for j in range(A1.shape[1]): a1 = A1[i,j] g = G[i,j] H = np.array([[a1 + 1j*gamma, g], [g, a2 + 1j*kappa]]) eig_vals = np.linalg.eigvals(H) sorted_eig = sorted(eig_vals, key=lambda x: x.real) eig_real1[i,j] = sorted_eig[0].real eig_imag1[i,j] = sorted_eig[0].imag eig_real2[i,j] = sorted_eig[1].real eig_imag2[i,j] = sorted_eig[1].imag # 绘制特征值1实部的3D曲面 fig = plt.figure(figsize=(12, 8)) ax = fig.add_subplot(111, projection='3d') surf = ax.plot_surface(A1, G, eig_real1, cmap=cm.viridis) ax.set_xlabel('a1') ax.set_ylabel('g') ax.set_zlabel('特征值1实部') ax.set_title('特征值1实部随a1和g的演化') fig.colorbar(surf) plt.show()
关键注意事项
- 非厄米矩阵的特征值为复数,实部对应能级位置,虚部对应系统的衰减/增益速率
- 对特征值按实部排序可避免绘图时曲线交叉,保证每条曲线对应同一特征分支
- 可根据研究需求调整参数扫描范围,若关注例外点(EP),可缩小范围聚焦EP附近区域
内容的提问来源于stack exchange,提问作者romar
相关产品推荐
相关产品推荐

