【问题标题】:Plot for Function not looping绘制函数不循环
【发布时间】:2018-10-03 18:43:11
【问题描述】:

我正在尝试绘制 h 与 eig_gs 但它只返回一个值。首先哈密顿量定义如下:

def Hamiltonian(alpha,h):

    Sx = np.array([[0,1],[1,0]])
    Sy = np.array([[0,-1j],[1j,0]])
    Sz = np.array([[1,0],[0,-1]])
    I  = np.array([[1,0],[0,1]])

    H = ( (alpha*np.kron(np.kron(Sx,Sx),I))
       + (alpha*np.kron(np.kron(Sy,Sy),I))
       + (alpha*np.kron(np.kron(I,Sx),Sx))
       + (alpha*np.kron(np.kron(I,Sy),Sy))
       + (h*np.kron(np.kron(I,Sz),I)) )

    return H

它返回一个 8x8 矩阵,我可以将其用于我的工作。我的问题是我的代码有什么问题来阻止它循环遍历所有 oh h 而不仅仅是最后一个值?我尝试将 H 粘贴在 for 循环中,但这不会改变值,我尝试将其写为

H = Hamiltonian(1,h.size)

(在for循环内)但这并不能解决问题

# Computation of eigenvalues from density matrix

h = np.array([0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0])
eig_gs = np.zeros(h.size, dtype = 'complex')

for i in range(h.size):
    H = Hamiltonian(1,h.size)
    eigvals, eigvecs = LA.eigh(H)

    # Density of the GS
    g_state = eigvecs[:,0]
    rho_gs = np.outer(g_state, g_state.conjugate())

    # Expectation value of the energy GS density matrix
    eig_gs[i] = np.trace(rho_gs.dot(H))

plt.plot(h, eig_gs.real)
plt.show()

如果我将 plt.plot 放在 for 循环中,我会得到以下信息(这没有意义):

【问题讨论】:

  • 我想你忘了告诉Hamiltonian 是什么。一般来说,请确保代码可以自行运行。
  • @ImportanceOfBeingErnest 啊,是的,我忘记了,谢谢,我现在就编辑它
  • 你没有把你的 plot 命令放在 for 循环中。这不就是你只得到一个值的原因吗?
  • 您的 eig_gs 的长度为 11,并且都是相同的值。你的能量值退化了 11 倍
  • @Bazingaa 我更改了问题以反映您的第一条评论,感谢您的输入。我如何确保我得到不同的 eig_gs 值?当我为不同的汉密尔顿人打印它们时,我得到了不同的答案,但是当我尝试绘制它们时,它只返回一个退化值

标签: python-3.x numpy for-loop matplotlib


【解决方案1】:

您需要将哈密顿量放在 for 循环中,并在计算哈密顿量时传递相应的 h 值。附加所有特征值后,您可以将它们绘制在 for 循环之外。下面的结果显示了通过解决您的特征值问题获得的离散能谱。使用axhline 绘制的水平线可以最好地可视化离散能级

for i in range(h.size):
    H = Hamiltonian(1,h[i]) # Update the Hamiltonian
    eigvals, eigvecs = LA.eigh(H)
    # Density of the GS
    g_state = eigvecs[:,0]
    rho_gs = np.outer(g_state, g_state.conjugate())
    # Expectation value of the energy GS density matrix
    eig_gs[i] = np.trace(rho_gs.dot(H))

for i in range(h.size):
    plt.axhline(eig_gs[i].real)

【讨论】:

  • h[i]!!!我知道这很简单,非常感谢 Bazingaa 你的传奇
  • 我已经完成了这些类似的问题,包括自己求解薛定谔方程,所以我知道问题出在哪里;)
猜你喜欢
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多