【发布时间】:2019-02-06 16:06:50
【问题描述】:
我想在我的代码中对每个蒙特卡罗循环进行动画处理。但是,图像没有更新,并且与开始时的图像保持一致。
ground_state 是一个二维数组,在每次调用模拟后都会发生变化。我已经检查过它确实在更新中发生了变化
fig = pyplot.figure()
im = pyplot.imshow(ground_state, animated = True)
def update_fig(*args):
global ground_state
simulate(ground_state, 100000, 2.4)
im.set_data(ground_state)
return im
ani = animation.FuncAnimation(fig, update_fig, interval = 50)
pyplot.show()
这是模拟功能:-
def simulate(state, n, T):
"""
Simulates at temperature T for N iterations.
"""
def acceptance_ratio(del_E):
"""
Calculates the acceptance ratio.
"""
# value of beta = 1 / (boltzmann constant * T)
beta = 1 / T
if (del_E) < 0:
return 1
else:
return e ** (-beta * (del_E))
step = 0
cycle = 0
# Single flipping
for dummy in range(n):
switch = (random.choice(range(len(state))),
random.choice(range(len(state))))
neighbours = nearest_neighbours(switch[0], switch[1], len(state))
change_E = 0
for pos in neighbours:
change_E += 2 * J * state[pos[0]][pos[1]] * state[switch[0][switch[1]]
p = acceptance_ratio(change_E)
step += 1
if step == 100 * 100:
cycle += 1
rand_num = random.random()
if rand_num <= p:
state[switch[0]][switch[1]] *= -1
return state
【问题讨论】:
标签: python matplotlib animation imshow