我正在尝试在 Python 中为 Gibbs Distribution 实现 Ising 模型:
我的代码是这样的:
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()
我不得不提问:
- 为什么有些人服用
2** Spin[k] * sum(Spin[n] for n in neighbors[k])?他们正在修复? 2)如果我想为 Bose Einstein 分布实现 MH 算法,邻居将如何变化?我知道玻色爱因斯坦分布中的玻色子具有整数自旋。
有什么帮助吗?