You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何评估并绘制非厄米矩阵特征值?两能级系统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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:20:35