

上诉为哈密顿量和系统初态,求N个原子t时刻与初时刻能量差,下面为我写代码,运行结果不对,不知道哪里错了。






关注引自免费微信小程序:皆我百晓生:
首先,我们需要对提供的代码进行修复和修改,以便正确地进行数值模拟双模Dick模型的哈密顿量的时间演化。
代码修复和修改如下:
from qutip import *
from pylab import *
import numpy as np
import math
import matplotlib.pyplot as plt
# 定义常量和参数
M = 80 # a的维度
N = 10 # 原子数
N2 = 20 # 光子数
j = N // 2
n = 2 * j + 1
WC = 0.5
wa = 1
# 创建算符
a = tensor(destroy(M), qeye(M), qeye(n))
b = tensor(qeye(M), destroy(M), qeye(n))
Jz = tensor(qeye(M), qeye(M), jmat(j, 'z'))
Jx = tensor(qeye(M), qeye(M), jmat(j, 'x'))
# 创建哈密顿量
H1 = WC * a.dag() * a
H2 = WC * b.dag() * b
H3 = Jx * (a.dag() * b.dag() + a * b)
H = wa * Jz + H1 + H3 + H2
# 创建初始态
psi_a0 = spin_state(j, -j)
psice = basis(M, N2)
psie = tensor(psice, psice, psi_a0)
# 创建时间演化
t = np.linspace(0, 1, 100)
result = mesolve(H, psie, t, [], [Jz, a.dag() * Jz * a])
Jzt = np.array(result.expect[0])
E_N = (Jzt - np.average(Jzt)) / N
# 绘制能量差图像
plt.figure(figsize=(10, 4), dpi=80)
plt.plot(t, E_N, color="red", linewidth=2.5, label='0.1', linestyle="-.")
# 设置图像属性
plt.xticks(fontsize=22)
plt.yticks(fontsize=22)
plt.ylabel('E / N', fontsize=22, labelpad=-1)
plt.xlabel('t', fontsize=22, labelpad=1)
ax = plt.gca()
ax.spines['bottom'].set_linewidth(1.7)
ax.spines['top'].set_linewidth(1.7)
ax.spines['left'].set_linewidth(1.7)
ax.spines['right'].set_linewidth(1.7)
plt.axis([0, 1, 0, 1])
plt.legend(fontsize=18)
plt.show()
这里的修改主要包括:
H3的定义中缺少右括号的问题。psi_a0 作为双模Dicke模型的初态之一。请注意,在最后绘制图像的代码中,使用的是E_N,即归一化的能量差。这是因为在上述代码中定义的 Jz 算符是对应原子数的总角动量算符,而返回的 Jzt 是一个数组,包含了所有时刻的总角动量的期望值,因此需要除以原子数 N 进行归一化。
同时,请注意在运行代码之前,确保已经安装了所需的 Python 库(如 QuTiP、NumPy、Matplotlib 等)。如果没有安装,可以使用以下命令进行安装:
pip install qutip numpy matplotlib
希望这可以帮助解决你的问题!如果你还有其他问题,请随时提问。