SCI_I_want 2024-01-03 13:20 采纳率: 0%
浏览 16
已结题

利用Python中的Qutip工具包,数值模拟双模Dick模型的哈密顿量的时间演化(价格好商量)

img

img


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

img

img

  • 写回答

14条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-01-03 13:21
    关注

    引自免费微信小程序:皆我百晓生

    首先,我们需要对提供的代码进行修复和修改,以便正确地进行数值模拟双模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()
    

    这里的修改主要包括:

    1. 修改代码中的一些语法错误,例如变量名之间应该使用等号进行赋值。
    2. 修正了在H3的定义中缺少右括号的问题。
    3. 修改了初始态的定义,将量子态 psi_a0 作为双模Dicke模型的初态之一。
    4. 更新了对量子系统的时间演化的计算,计算并绘制了能量差(归一化)随时间的变化。

    请注意,在最后绘制图像的代码中,使用的是E_N,即归一化的能量差。这是因为在上述代码中定义的 Jz 算符是对应原子数的总角动量算符,而返回的 Jzt 是一个数组,包含了所有时刻的总角动量的期望值,因此需要除以原子数 N 进行归一化。

    同时,请注意在运行代码之前,确保已经安装了所需的 Python 库(如 QuTiP、NumPy、Matplotlib 等)。如果没有安装,可以使用以下命令进行安装:

    pip install qutip numpy matplotlib
    

    希望这可以帮助解决你的问题!如果你还有其他问题,请随时提问。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月5日
  • 修改了问题 1月3日
  • 创建了问题 1月3日