График для функции не цикл - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь построить 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

Если я помещаю plt.plot в цикл for, я получаю следующее (что не имеет смысла):

enter image description here

1 Ответ

0 голосов
/ 03 октября 2018

Вам нужно поместить гамильтониан в цикл 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)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...