量子伊辛模型的大矩阵

问题描述 投票:0回答:1

我编写了一个 Python 代码,用于计算具有横向场的伊辛模型的状态密度矩阵,然后计算系统的冯·诺依曼熵。问题是状态密度矩阵随着 $2^N$ 增长,其中 N 是晶格中的自旋数。该程序在 N = 14 之前运行良好,但在 N = 15 时就会崩溃。需要注意的是,我使用 Google Colab 来运行代码,并且有 12.7 GB 的可用 RAM。有人可以帮助我优化代码以运行更大的矩阵吗?

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 值,它仍然不起作用。我还尝试进行插值/外推,但不是一个很好的近似,我想精确计算密度矩阵。

python matrix sparse-matrix entropy qutip
1个回答
0
投票

我测试了您的代码,并注意到,删除

eigvals=1
并仅使用稀疏矩阵,可能会导致内存使用量严重下降。我不知道发生了什么导致
eigvals=1
消耗如此多的内存,但删除它就可以了。

顺便说明一下,如果您需要更多 RAM,请考虑使用 Linux SWAP 内存。这是将 HD 或 SSD 的一部分用作辅助 RAM 内存的有用方法。它会比较慢,但可以作为实际 RAM 的替代品。

© www.soinside.com 2019 - 2024. All rights reserved.