Python 中的 Ising 模型(磁化缩放)

计算科学 Python 算法 量子力学
2021-12-19 14:42:42

我正在尝试在 Python 中为 Gibbs Distribution 实现 Ising 模型:

π(x)=1Z(β)eβH(x)

p(x,y)=r(x,y)min(π(y)π(x),1)=r(x,y)min(eβ(H(y)H(x)),1)=r(x,y)eβ(H(y)H(x))+=U(0,1)<eβ(H(y)H(x))+

我的代码是这样的:

import pylab 
import numpy as np  

L = 128
N = L*L

#   // floor division
#   %  modulus
neighbors = {i : ((i // L) * L + (i + 1) % L,   # RIGHT
                 (i + L) % N,                   # DOWN
                 (i // L) * L + (i - 1) % L,    # LEFT
                 (i - L) % N)                   # UP
                 for i in range(N)}

Temperature = 1.0
Spin = [np.random.choice([1, -1]) for k in range(N)]
spin_table = [[None for x in range(L)] for y in range(L)]

nsteps = N * 100
for step in range(nsteps):
    k = np.random.randint(0, N - 1)
    delta_E = -0.441 * Spin[k] * sum(Spin[n] for n in neighbors[k])
    if np.random.uniform(0.0, 1.0) < np.exp(-delta_E/Temperature):
        Spin[k] *= +1

for k in range(N):
    y = k // L
    x=  k % L
    spin_table[x][y] = Spin[k]

pylab.close()
pylab.imshow(spin_table,extent=[0,L,0,L],interpolation='nearest')
pylab.title("Temperature: "+str(Temperature)+", Grid Size: "+str(L))
pylab.show()

我不得不提问:

  1. 为什么有些人服用2** Spin[k] * sum(Spin[n] for n in neighbors[k])?他们正在修复β=2? 2)如果我想为 Bose Einstein 分布实现 MH 算法,邻居将如何变化?我知道玻色爱因斯坦分布中的玻色子具有整数自旋。

有什么帮助吗?

0个回答
没有发现任何回复~