-
David Ramos Salamanca authored4068b3bc
metropolis.py 1.03 KiB
import numpy as np
def pi_0(N):
"""Genera un arreglo NxN de numpy con valores 1 o -1 escogidos aleatoriamente.
Argumentos:
N -- int
tamaño de la red
"""
Pi_0 = 2*np.random.randint(2 , size = (N,N)) - 1
return Pi_0
def MC_metropolis(arreglo, beta, N):
"""Ejecuta un paso de monte carlo sobre una configuración de espines
Argumentos:
arreglo -- arreglo NxN de numpy
valores del espin en cada sitio
beta -- flotante
inverso de la temperatura en unidades donde kb = J = 1
N -- int
"""
for i in range(0, 2 * N**2):
a, b = np.random.randint(0,N), np.random.randint(0,N)
rand_spin = arreglo[a, b]
vecinos = arreglo[(a+1)%N, b] + arreglo[a, (b+1)%N] + \
arreglo[(a-1)%N, b] + arreglo[a, (b-1)%N]
delta_energia = 2 * rand_spin * vecinos
if delta_energia < 0:
arreglo[a,b] *= -1
elif np.random.uniform(0,1) < np.exp(-delta_energia*beta):
arreglo[a,b] *= -1
return arreglo