<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=Metropolis_Segundos_Vizinhos</id>
	<title>Metropolis Segundos Vizinhos - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=Metropolis_Segundos_Vizinhos"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Metropolis_Segundos_Vizinhos&amp;action=history"/>
	<updated>2026-04-07T14:51:34Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Metropolis_Segundos_Vizinhos&amp;diff=10072&amp;oldid=prev</id>
		<title>Andrebg: Criou página com '=Variação temporal em Python para o Google Colab=  &lt;source lang=&quot;python&quot;&gt;  !mkdir grafs !rm grafs/*  import numpy as np import matplotlib.pyplot as plt import random from PIL import Image import glob import IPython.display  #Declaração de ctes l = 100 acoplamento1 = 1 acoplamento2 = 1 campo = 0 temperatura = 0.1  beta = 1/temperatura tf = 50*l*l t=0  Eneg = [] Mag = [] Temp = []  Spins = np.ones(l*l)  #Randomização Inicial for i in range(l*l):   if random.random()...'</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Metropolis_Segundos_Vizinhos&amp;diff=10072&amp;oldid=prev"/>
		<updated>2024-02-23T00:03:58Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;=Variação temporal em Python para o Google Colab=  &amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;  !mkdir grafs !rm grafs/*  import numpy as np import matplotlib.pyplot as plt import random from PIL import Image import glob import IPython.display  #Declaração de ctes l = 100 acoplamento1 = 1 acoplamento2 = 1 campo = 0 temperatura = 0.1  beta = 1/temperatura tf = 50*l*l t=0  Eneg = [] Mag = [] Temp = []  Spins = np.ones(l*l)  #Randomização Inicial for i in range(l*l):   if random.random()...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Variação temporal em Python para o Google Colab=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
!mkdir grafs&lt;br /&gt;
!rm grafs/*&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import random&lt;br /&gt;
from PIL import Image&lt;br /&gt;
import glob&lt;br /&gt;
import IPython.display&lt;br /&gt;
&lt;br /&gt;
#Declaração de ctes&lt;br /&gt;
l = 100&lt;br /&gt;
acoplamento1 = 1&lt;br /&gt;
acoplamento2 = 1&lt;br /&gt;
campo = 0&lt;br /&gt;
temperatura = 0.1&lt;br /&gt;
&lt;br /&gt;
beta = 1/temperatura&lt;br /&gt;
tf = 50*l*l&lt;br /&gt;
t=0&lt;br /&gt;
&lt;br /&gt;
Eneg = []&lt;br /&gt;
Mag = []&lt;br /&gt;
Temp = []&lt;br /&gt;
&lt;br /&gt;
Spins = np.ones(l*l)&lt;br /&gt;
&lt;br /&gt;
#Randomização Inicial&lt;br /&gt;
for i in range(l*l):&lt;br /&gt;
  if random.random() &amp;lt;= 0.25:&lt;br /&gt;
    Spins[i] = -Spins[i]&lt;br /&gt;
&lt;br /&gt;
X,Y = np.meshgrid(np.arange(0,l),np.arange(0,l))&lt;br /&gt;
&lt;br /&gt;
#Definição da matriz de primeiros vizinhos&lt;br /&gt;
Vizinhos = np.zeros((l*l,4),dtype=int)&lt;br /&gt;
&lt;br /&gt;
contador1 = 1&lt;br /&gt;
contador2 = 1&lt;br /&gt;
for i in range(l*l):&lt;br /&gt;
  if contador1 == 1:&lt;br /&gt;
    Vizinhos[i][0] = int(i + l - 1)&lt;br /&gt;
    Vizinhos[i][2] = int(i + 1)&lt;br /&gt;
  elif contador1 == l:&lt;br /&gt;
    Vizinhos[i][0] = int(i - 1)&lt;br /&gt;
    Vizinhos[i][2] = int(i - l + 1)&lt;br /&gt;
  else:&lt;br /&gt;
    Vizinhos[i][0] = int(i - 1)&lt;br /&gt;
    Vizinhos[i][2] = int(i + 1)&lt;br /&gt;
&lt;br /&gt;
  if contador2 &amp;gt;= l*l - l:&lt;br /&gt;
    Vizinhos[i][3] = int(i + l - l*l)&lt;br /&gt;
  else:&lt;br /&gt;
    Vizinhos[i][3] = int(i + l)&lt;br /&gt;
&lt;br /&gt;
  Vizinhos[i][1] = int(i - l)&lt;br /&gt;
&lt;br /&gt;
  if contador1 == l:&lt;br /&gt;
    contador1 = 1&lt;br /&gt;
  else:&lt;br /&gt;
    contador1+=1&lt;br /&gt;
&lt;br /&gt;
  contador2 +=1&lt;br /&gt;
&lt;br /&gt;
#Definição da matriz de segundos vizinhos&lt;br /&gt;
Vizinhos2 = np.zeros((l*l,4),dtype=int)&lt;br /&gt;
&lt;br /&gt;
for i in range(l*l):&lt;br /&gt;
  Vizinhos2[i][0] = Vizinhos[Vizinhos[i][0]][1]&lt;br /&gt;
  Vizinhos2[i][1] = Vizinhos[Vizinhos[i][1]][2]&lt;br /&gt;
  Vizinhos2[i][2] = Vizinhos[Vizinhos[i][2]][3]&lt;br /&gt;
  Vizinhos2[i][3] = Vizinhos[Vizinhos[i][3]][0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Definição energia inicial&lt;br /&gt;
energia = 0&lt;br /&gt;
for i in range(l*l):&lt;br /&gt;
  energia += -acoplamento1 * Spins[i] * (Spins[Vizinhos[i][0]] + Spins[Vizinhos[i][1]] + Spins[Vizinhos[i][2]] + Spins[Vizinhos[i][3]]) - acoplamento2 * Spins[i] * (Spins[Vizinhos2[i][0]] + Spins[Vizinhos2[i][1]] + Spins[Vizinhos2[i][2]] + Spins[Vizinhos2[i][3]]) - (campo * Spins[i])&lt;br /&gt;
&lt;br /&gt;
#Loop Temporal&lt;br /&gt;
while t &amp;lt;= tf:&lt;br /&gt;
  #Sorteio para inversão de Spin&lt;br /&gt;
  inverter = random.randint(0,(l*l)-1)&lt;br /&gt;
&lt;br /&gt;
  #Calculo da energia&lt;br /&gt;
  deltae = 2 * acoplamento1 * Spins[inverter] * (Spins[Vizinhos[inverter][0]] + Spins[Vizinhos[inverter][1]] + Spins[Vizinhos[inverter][2]] + Spins[Vizinhos[inverter][3]]) + 2 * acoplamento2 * Spins[inverter] * (Spins[Vizinhos2[inverter][0]] + Spins[Vizinhos2[inverter][1]] + Spins[Vizinhos2[inverter][2]] + Spins[Vizinhos2[inverter][3]]) + 2 * (campo * Spins[inverter])&lt;br /&gt;
&lt;br /&gt;
  #Calculo da nova energia&lt;br /&gt;
&lt;br /&gt;
  if deltae &amp;lt;= 0:&lt;br /&gt;
    energia += deltae&lt;br /&gt;
    Spins[inverter] = -Spins[inverter]&lt;br /&gt;
  else:&lt;br /&gt;
    if random.random() &amp;lt; np.exp(-beta*deltae):&lt;br /&gt;
      energia += deltae&lt;br /&gt;
      Spins[inverter] = -Spins[inverter]&lt;br /&gt;
&lt;br /&gt;
  Mag.append(np.sum(Spins)/(l*l))&lt;br /&gt;
  Temp.append(1/beta)&lt;br /&gt;
  Eneg.append(energia)&lt;br /&gt;
&lt;br /&gt;
  # Criação de figura&lt;br /&gt;
  if t % (l*l) == 0:&lt;br /&gt;
    fig = plt.figure(figsize=(5,5))&lt;br /&gt;
    plt.pcolormesh(X,Y,Spins.reshape([l,l]),cmap='inferno',vmin=-1,vmax=1)&lt;br /&gt;
    plt.title('tempo:%.2f'% (t/(l*l)))&lt;br /&gt;
    fig.savefig('./grafs/%c.PNG'% int(t/(l*l)+1))&lt;br /&gt;
    plt.close()&lt;br /&gt;
&lt;br /&gt;
  t += 1&lt;br /&gt;
&lt;br /&gt;
Mag = np.array(Mag)&lt;br /&gt;
Temp = np.array(Temp)&lt;br /&gt;
Eneg = np.array(Eneg)&lt;br /&gt;
&lt;br /&gt;
csi = beta * l*l * (np.mean(Mag**2) - np.mean(Mag)**2)&lt;br /&gt;
calor = (beta**2) * (np.mean(Eneg**2) - np.mean(Eneg)**2) / (l*l)&lt;br /&gt;
&lt;br /&gt;
print('Susceptibilidade: ', csi)&lt;br /&gt;
print('Calor específico: ', calor)&lt;br /&gt;
&lt;br /&gt;
plt.plot(np.arange(0,len(Eneg))/(l*l),Eneg)&lt;br /&gt;
plt.xlabel('Tempo')&lt;br /&gt;
plt.ylabel('Energia')&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
plt.plot(np.arange(0,len(Mag))/(l*l),Mag)&lt;br /&gt;
# plt.plot((0,tf/(l*l)),(0,campo),label='Campo Induzido')&lt;br /&gt;
plt.xlabel('Tempo')&lt;br /&gt;
plt.ylabel('Magnetização')&lt;br /&gt;
plt.ylim(0,1.1)&lt;br /&gt;
# plt.legend()&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
# Criação do GIF&lt;br /&gt;
frames = (Image.open(f) for f in sorted(glob.glob(&amp;quot;./grafs/*.PNG&amp;quot;)))&lt;br /&gt;
frame_one = next(frames)&lt;br /&gt;
frame_one.save(&amp;quot;animado.gif&amp;quot;, format=&amp;quot;GIF&amp;quot;, append_images=frames, save_all=True, duration=150, loop=0)&lt;br /&gt;
&lt;br /&gt;
IPython.display.Image(open('animado.gif','rb').read())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Variação de temperatura em Python=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import random&lt;br /&gt;
&lt;br /&gt;
#Declaração de ctes&lt;br /&gt;
l = 100&lt;br /&gt;
acoplamento1 = 1&lt;br /&gt;
acoplamento2 = 0&lt;br /&gt;
campo = 0&lt;br /&gt;
&lt;br /&gt;
tf = 50*l*l&lt;br /&gt;
t=0&lt;br /&gt;
&lt;br /&gt;
Mag = []&lt;br /&gt;
Temp = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
X,Y = np.meshgrid(np.arange(0,l),np.arange(0,l))&lt;br /&gt;
&lt;br /&gt;
#Definição da matriz de primeiros vizinhos&lt;br /&gt;
Vizinhos = np.zeros((l*l,4),dtype=int)&lt;br /&gt;
&lt;br /&gt;
contador1 = 1&lt;br /&gt;
contador2 = 1&lt;br /&gt;
for i in range(l*l):&lt;br /&gt;
  if contador1 == 1:&lt;br /&gt;
    Vizinhos[i][0] = int(i + l - 1)&lt;br /&gt;
    Vizinhos[i][2] = int(i + 1)&lt;br /&gt;
  elif contador1 == l:&lt;br /&gt;
    Vizinhos[i][0] = int(i - 1)&lt;br /&gt;
    Vizinhos[i][2] = int(i - l + 1)&lt;br /&gt;
  else:&lt;br /&gt;
    Vizinhos[i][0] = int(i - 1)&lt;br /&gt;
    Vizinhos[i][2] = int(i + 1)&lt;br /&gt;
&lt;br /&gt;
  if contador2 &amp;gt;= l*l - l:&lt;br /&gt;
    Vizinhos[i][3] = int(i + l - l*l)&lt;br /&gt;
  else:&lt;br /&gt;
    Vizinhos[i][3] = int(i + l)&lt;br /&gt;
&lt;br /&gt;
  Vizinhos[i][1] = int(i - l)&lt;br /&gt;
&lt;br /&gt;
  if contador1 == l:&lt;br /&gt;
    contador1 = 1&lt;br /&gt;
  else:&lt;br /&gt;
    contador1+=1&lt;br /&gt;
&lt;br /&gt;
  contador2 +=1&lt;br /&gt;
&lt;br /&gt;
#Definição da matriz de segundos vizinhos&lt;br /&gt;
Vizinhos2 = np.zeros((l*l,4),dtype=int)&lt;br /&gt;
&lt;br /&gt;
for i in range(l*l):&lt;br /&gt;
  Vizinhos2[i][0] = Vizinhos[Vizinhos[i][0]][1]&lt;br /&gt;
  Vizinhos2[i][1] = Vizinhos[Vizinhos[i][1]][2]&lt;br /&gt;
  Vizinhos2[i][2] = Vizinhos[Vizinhos[i][2]][3]&lt;br /&gt;
  Vizinhos2[i][3] = Vizinhos[Vizinhos[i][3]][0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Loop Temperaturas&lt;br /&gt;
for temperatura in np.arange(0.001,5,0.1):&lt;br /&gt;
&lt;br /&gt;
  beta = 1/temperatura&lt;br /&gt;
  t=0&lt;br /&gt;
  Mag_temp = []&lt;br /&gt;
&lt;br /&gt;
  #Condições iniciais&lt;br /&gt;
  Spins = np.ones(l*l)&lt;br /&gt;
    #Randomização Inicial&lt;br /&gt;
  for i in range(l*l):&lt;br /&gt;
    if random.random() &amp;lt;= 0.25:&lt;br /&gt;
      Spins[i] = -Spins[i]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #Loop Temporal&lt;br /&gt;
  while t &amp;lt;= tf:&lt;br /&gt;
    #Sorteio para inversão de Spin&lt;br /&gt;
    inverter = random.randint(0,(l*l)-1)&lt;br /&gt;
&lt;br /&gt;
    #Calculo da energia&lt;br /&gt;
    deltae = 2 * acoplamento1 * Spins[inverter] * (Spins[Vizinhos[inverter][0]] + Spins[Vizinhos[inverter][1]] + Spins[Vizinhos[inverter][2]] + Spins[Vizinhos[inverter][3]]) + 2 * acoplamento2 * Spins[inverter] * (Spins[Vizinhos2[inverter][0]] + Spins[Vizinhos2[inverter][1]] + Spins[Vizinhos2[inverter][2]] + Spins[Vizinhos2[inverter][3]]) + 2 * (campo * Spins[inverter])&lt;br /&gt;
&lt;br /&gt;
    #Calculo da nova energia&lt;br /&gt;
    if deltae &amp;lt;= 0:&lt;br /&gt;
      Spins[inverter] = -Spins[inverter]&lt;br /&gt;
    else:&lt;br /&gt;
      if random.random() &amp;lt; np.exp(-beta*deltae):&lt;br /&gt;
        Spins[inverter] = -Spins[inverter]&lt;br /&gt;
&lt;br /&gt;
    Mag_temp.append(np.sum(Spins)/(l*l))&lt;br /&gt;
&lt;br /&gt;
    t += 1&lt;br /&gt;
  Mag.append(np.mean(Mag_temp[-100:]))&lt;br /&gt;
  Temp.append(temperatura)&lt;br /&gt;
&lt;br /&gt;
plt.plot(Temp,Mag)&lt;br /&gt;
plt.xlabel('Temperatura')&lt;br /&gt;
plt.ylabel('Magnetização')&lt;br /&gt;
plt.ylim(-0.1,1.1)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrebg</name></author>
	</entry>
</feed>