Я пытаюсь построить 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, которую я могу использовать для своей работы.Мой вопрос заключается в том, что не так в моем коде, чтобы остановить его цикл по всем о, а не только последнее значение?Я попытался вставить 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()
![result](https://i.stack.imgur.com/iLp1z.png)
Если я помещаю plt.plot в цикл for, я получаю следующее (что не имеет смысла):
![enter image description here](https://i.stack.imgur.com/r5vyC.png)