Python伊辛模型绘图 我应该开始说我不知道如何编码,在编码时我甚至不认为自己是初学者。尽管如此,我还是非常感谢您在开始编写代码方面给予我的帮助。正如标题所示,我必须对伊辛模型进行编码。该模型的前提是:

Python伊辛模型绘图 我应该开始说我不知道如何编码,在编码时我甚至不认为自己是初学者。尽管如此,我还是非常感谢您在开始编写代码方面给予我的帮助。正如标题所示,我必须对伊辛模型进行编码。该模型的前提是:,python,plot,Python,Plot,E=-∑(hs(i))-∑(Js(i)*s(j)) 这将遵循我相信的蒙特卡罗模拟。所以对于{s(i)}的每种构型,都有一个概率e^(-ße{s(i)}) 我们从一个随机自旋开始产生势{s(i)} 如果E(1)>E(0),我们翻转符号 如果E(1)

E=-∑(hs(i))-∑(Js(i)*s(j))

这将遵循我相信的蒙特卡罗模拟。所以对于{s(i)}的每种构型,都有一个概率e^(-ße{s(i)})

我们从一个随机自旋开始产生势{s(i)}

如果E(1)>E(0),我们翻转符号

如果E(1) 如果数字为x,则表示x为:

x x>e^(ß∆E) 然后什么也不做{s(i)}={s(0)}

我希望这是足够的信息,但我没有拿起一些代码,我认为是相关的

import numpy as np
import random


def init_spin_array(rows, cols):
return np.ones((rows, cols))


def find_neighbors(spin_array, lattice, x, y):
left   = (x, y - 1)
right  = (x, (y + 1) % lattice)
top    = (x - 1, y)
bottom = ((x + 1) % lattice, y)

return [spin_array[left[0], left[1]],
    spin_array[right[0], right[1]],
    spin_array[top[0], top[1]],
    spin_array[bottom[0], bottom[1]]]


def energy(spin_array, lattice, x ,y):
return 2 * spin_array[x, y] * sum(find_neighbors(spin_array, lattice, x, y))


def main():
RELAX_SWEEPS = 50
lattice = eval(input("Enter lattice size: "))
sweeps = eval(input("Enter the number of Monte Carlo Sweeps: "))
for temperature in np.arange(0.1, 5.0, 0.1):
spin_array = init_spin_array(lattice, lattice)
# the Monte Carlo follows below
mag = np.zeros(sweeps + RELAX_SWEEPS)
for sweep in range(sweeps + RELAX_SWEEPS):
    for i in range(lattice):
        for j in range(lattice):
            e = energy(spin_array, lattice, i, j)
            if e <= 0:
                spin_array[i, j] *= -1
            elif np.exp((-1.0 * e)/temperature) > random.random():
                spin_array[i, j] *= -1
    mag[sweep] = abs(sum(sum(spin_array))) / (lattice ** 2)
print(temperature, sum(mag[RELAX_SWEEPS:]) / sweeps)

main()
将numpy导入为np
随机输入
def初始自旋数组(行、列):
返回np.ones((行、列))
def find_邻居(自旋数组、晶格、x、y):
左=(x,y-1)
右=(x,(y+1)%晶格)
顶部=(x-1,y)
底部=((x+1)%y)
return[spin_array[left[0],left[1]],
自旋数组[右[0],右[1]],
自旋数组[top[0],top[1]],
自旋数组[bottom[0],bottom[1]]
def能量(自旋阵列、晶格、x、y):
返回2*spin_数组[x,y]*sum(查找_邻居(spin_数组,晶格,x,y))
def main():
松弛扫掠=50
lattice=eval(输入(“输入晶格大小:”)
扫描=评估(输入(“输入蒙特卡罗扫描次数:”)
对于np.arange(0.1,5.0,0.1)中的温度:
自旋数组=初始自旋数组(晶格,晶格)
#下面是蒙特卡罗方法
mag=np.零点(扫掠+松弛扫掠)
对于范围内的扫掠(扫掠+松弛扫掠):
对于范围内的i(晶格):
对于范围内的j(晶格):
e=能量(自旋阵列,晶格,i,j)
如果e random.random():
自旋阵列[i,j]*=-1
mag[sweep]=abs(和(和(自旋阵列))/(晶格**2)
打印(温度、总和(磁[松弛扫描:)/扫描)
main()

我所需要的只是将这些信息绘制成M vs.T图,然后以某种方式更改代码,以允许三个参数h,J,T发生变化,就像我将T保持在某个#,h vs.J图是什么样子。非常感谢您的帮助。

对不起,这不是编码或教学服务。作者应积极参与解决至少需要基本编程技能的问题。这就是你应该开始的地方:找一本好书或一篇教程,开始学习Python。没那么难。有什么建议可以帮我把这个方程编码成蒙特卡罗模拟吗?