Большие матрицы для квантовой модели ИзингаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Большие матрицы для квантовой модели Изинга

Сообщение Anonymous »

Я написал код на Python, который вычисляет матрицу плотности состояний для модели Изинга с поперечным полем, а затем вычисляет энтропию фон Неймана для системы. Проблема в том, что матрица плотности состояний растет с ростом $2^N$, где N — число спинов в решетке. Программа работает хорошо до N=14, но при N=15 вылетает. Важно отметить, что я использую Google Colab для запуска кода, и у меня доступно 12,7 ГБ оперативной памяти. Может ли кто-нибудь помочь мне оптимизировать код для работы с матрицами большего размера?

Код: Выделить всё

import numpy as np
import matplotlib.pyplot as plt
from qutip import sigmax, sigmaz, qeye, tensor, Qobj, entropy_vn

def hamiltonian(N, lambd):
sx = sigmax()
sz = sigmaz()
si = qeye(2)

H = 0
for i in range(N):
H -= lambd * tensor([sx if j == i or j == (i+1)%N else si for j in range(N)])
H -= tensor([sz if j == i else si for j in range(N)])

return H

def reduced_density_matrix(psi, N):
rho = psi.ptrace(0)  # Partial trace to get the reduced density matrix
return rho

def von_neumann_entropy(N, lambd):
H = hamiltonian(N, lambd)
eigvals, eigvecs = H.eigenstates()
ground_state = eigvecs[0]
rho_i = reduced_density_matrix(ground_state, N)
S_vn = entropy_vn(rho_i)  # Compute the von Neumann entropy
return S_vn

# Plotting the von Neumann entropy for various values of N
Ns = range(2, 16)  # Values of N from 2 to 15
lambd = 1.0  # Transverse field strength
entropies = []

for N in Ns:
S_vn = von_neumann_entropy(N, lambd)
entropies.append(S_vn)

plt.figure(figsize=(10, 6))
plt.plot(Ns, entropies, marker='o')
plt.xlabel('Number of Spins (N)')
plt.ylabel('Von Neumann Entropy')
plt.title('Von Neumann Entropy vs. Number of Spins for Transverse Field Ising Model')
plt.grid(True)
plt.show()
Я пытался вычислить только первое собственное значение, используя:

Код: Выделить всё

H.eigenstates(eigvals=1, sparse=True)
но это работает только для N = 14, для более высоких значений N это все равно не работает. Я также пытался выполнить интерполяцию/экстраполяцию, но это не было хорошим приближением, и я хочу точно вычислить матрицу плотности.

Подробнее здесь: https://stackoverflow.com/questions/788 ... sing-model
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»