【发布时间】: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