我的问题与使用马尔可夫链蒙特卡罗方法(MCMC)对一维伊辛模型进行Python编码有关
我有下面的哈密顿量
$$H = - \sum_{i=1}^{L-1}\sigma_{i}sigma_{i+1} - B\sum_{i=1}^{L}\sigma_{i}$$
我想编写一个python函数,生成一个马尔可夫链,在每个步骤中,它计算并保存磁化(每个站点)和能量
能量是(=哈密顿量),我将磁化定义为:
$$\frac{1}{L}\sum_{i}\sigma_{i}$$
我的概率分布是:
$$p(x) = e^{-H\beta}$$ where, $T^{-1} = \beta$
对于马尔可夫链,我将实现Metropolis-Hastings算法
if $$\frac{P(\sigma')}{P(\sigma)} = e^{(H(\sigma)-H(\sigma'))\beta}$$
我的想法是在必要时接受转换
$$H(\sigma') < H(\sigma)$$
并且只接受转换
$$H(\sigma') > H(\sigma)$$
有可能
$$P = e^{(H(\sigma)-H(\sigma'))\beta}$$
因此,让我设置一些参数,例如:
$L=20$ - Lattice Size
$T=2$ - Temperature
$B=0$ - Magnetic Field
在计算之后,我需要绘制一个磁化强度和能量与步长的直方图。我对这部分没有异议
我的python知识不是很好,但我已经包括了我的粗略(未完成)草稿。我认为我没有取得多大进展。任何帮助都会很好
#Coding attempt MCMC 1-Dimensional Ising Model
import numpy as np
import matplotlib.pyplot as plt
#Shape of Lattice L
L = 20
Shape = (20,20)
#Spin Configuration
spins = np.random.choice([-1,1],Shape)
#Magnetic moment
moment = 1
#External magnetic field
field = np.full(Shape, 0)
#Temperature
Temperature = 2
Beta = Temperature**(-1)
#Interaction (ferromagnetic if positive, antiferromagnetic if negative)
interaction = 1
#Using Probability Distribution given
def get_probability(Energy1, Energy2, Temperature):
return np.exp((Energy1 - Energy2) / Temperature)
def get_energy(spins):
return -np.sum(
interaction * spins * np.roll(spins, 1, axis=0) +
interaction * spins * np.roll(spins, -1, axis=0) +
interaction * spins * np.roll(spins, 1, axis=1) +
interaction * spins * np.roll(spins, -1, axis=1)
)/2 - moment * np.sum(field * spins)
#Introducing Metropolis Hastings Algorithim
x_now = np.random.uniform(-1, 1) #initial value
d = 10**(-1) #delta
y = []
for i in range(L-1):
#generating next value
x_proposed = np.random.uniform(x_now - d, x_now + d)
#accepting or rejecting the value
if np.random.rand() < np.exp(-np.abs(x_proposed))/(np.exp(-np.abs(x_now))):
x_now = x_proposed
if i % 100 == 0:
y.append(x_proposed)
在这里,我改变了你的代码,以我一贯的方式解决了这个问题
请仔细检查代码和公式
在模拟结束时,变量磁化和能量是包含每个MC步骤的测量值的阵列。 您可以直接使用这些数组来计算直方图和绘图
注:能量阵列是系统的总能量,而不是能量/L
我正在寻找一个1D伊辛模型的简单实现,偶然发现了这篇文章。虽然我不是这个领域的专家,但我确实写了一篇相关主题的硕士论文。我在Oriol Cabanas Tirapu的答案中实现了代码,并发现了一些bug(我想)
下面是我的改编版哦他们的代码。希望它对某些人有用
相关问题 更多 >
编程相关推荐