我正在尝试制作一个颤动图动画,以观察在蒙特卡罗模拟下演化的二维海森堡磁铁的轨迹。我的代码如下:
xylattice=initialize(Nx_lattice,'random')
xylattice,singx,singy=insert_defect_into_lattice(xylattice,defectspins,Nx_defect)
fig,ax=plt.subplots(1,1)
def generate_quiver(spinarray,Ndim):
xp=np.arange(0,Ndim,1)
yp=np.arange(0,Ndim,1)
yy,xx=np.meshgrid(xp,yp)
u=np.zeros(Ndim*Ndim)
v=np.zeros(Ndim*Ndim)
count=0
for i in range(Ndim):
for j in range(Ndim):
cartx,carty=polar_to_cartesian(spinarray[i,j])
u[count]=cartx
v[count]=carty
count += 1
return xx,yy,u,v
X,Y,U,V=generate_quiver(xylattice,Nx_lattice)
Q=ax.quiver(X,Y,U,V)
def update_quiver(num,xylattice):
energy=get_energy(xylattice)
magx,magy=get_magnetization(xylattice)
xylattice,energy,magx,magy=monte_carlo(xylattice,energy,magx,magy,beta)
X,Y,U,V=generate_quiver(xylattice,Nx_lattice)
Q=ax.quiver(X,Y,U,V)
return Q
anim=animation.FuncAnimation(fig,update_quiver,fargs=xylattice,interval=1,blit=False)
plt.show()
代码首先初始化一个名为 xylattice 的二维数组,并使用“insert_defect_into_lattice”函数对其进行一些修改。然后我用初始化的 xylattice 生成一个箭袋图。 update_quiver 函数运行一个蒙特卡罗步骤来改变 xylattice,然后生成一个新的箭袋图。我正在尝试使用 animation.FuncAnimation 函数为不断变化的箭袋图制作动画,但它似乎不喜欢将二维数组作为“fargs”的参数,我不知道该怎么做。任何帮助将不胜感激。