Ising Model - анимация Matplotlib - я хочу ее оживить - PullRequest
0 голосов
/ 28 декабря 2018

У меня проблемы с анимацией в matplotlib. Вот весь код:

import numpy as np
import numpy.random as rd
import matplotlib.pyplot as plt
from scipy.special import factorial
from scipy import linalg
from numba import jit
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from numba import jit
from  matplotlib.animation import FuncAnimation

%matplotlib inline

sqrtNspins=10             #generate 2D sample
Amostra2D=np.zeros((sqrtNspins,sqrtNspins))
for i in range (sqrtNspins):
    for j in range(sqrtNspins):
        Amostra2D[i,j]=np.sign(rd.random()-0.5)

@jit
def Hamiltoniano2D(Amostra2D):   #Hamiltonian
    N=len(Amostra2D)*len(Amostra2D)
    M=np.sum(Amostra2D)
    return (N-M)*(N+M)/(2*(N-1))    

А теперь важная часть:

@jit
def Exe3(Amos,b,tempos): #random walk function
    N=len(Amos)
    Amoscorre=np.copy(Amos)
    Magnetizacao=np.sum(Amoscorre)

    MagnEmCadaTempo=np.zeros(tempos)
    Data=np.empty()
    for j in range(tempos):
        ESTADONOVO=np.copy(Amoscorre)
        ESTADONOVO[rd.randint(N),rd.randint(N)]*=(-1) #change a spin
        Swag=np.append(Data,ESTADONOVO). #I wanted this to be my array of arrays that give me all states in all times
        if rd.random()<min(1,np.exp(-b*(Hamiltoniano2D(ESTADONOVO)-Hamiltoniano2D(Amoscorre)))):
        Amoscorre=np.copy(ESTADONOVO)

    MagnEmCadaTempo[j]=np.sum(Amoscorre)


    fig = plt.figure()
    plot =plt.matshow(Swag[0])

     def init():
        plot.set_data(Swag[0])
        return plot

    def update(j):
        plot.set_data(Swag[j])
        return [plot]


    anim = FuncAnimation(fig, update, init_func = init, frames=10000, interval = 30, blit=True)

    plt.show()
Exe3(Amostra2D,3,100) #beta=1   

Я никогда не использовал анимацию matplotlib ипосле прочтения некоторых веб-сайтов я не смог приспособиться к своей функции. Я уже сделал несколько «снимков», создавая matshow для каждого отдельного раза.Большое спасибо, Фернандо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...