function [Sij,DEc,dM] = ising2Dpaso(Sij,beta) %J=1 %extraigo el tamaƱo de la matriz Sij de espines en la posicion %i,j [Lx, Ly] = size(Sij); DEc = 0;%accumulated DEc from call dM=0; %accumulated dM from call %recorro cada uno de los sitios para proponer un cambio for i=1:Lx for j=1:Ly spin_old = Sij(i,j); %voy a proponer darlo vuelta spin_new = - Sij(i,j); %necesito calcular la energia de la nueva configuracion %busco los vecinos del spin ij para ver el cambio de energia, uso la function mod (modulo, %"resto") para tener en cuenta las condiciones periodicas. iright = mod(i,Lx) + 1; ileft = mod(i+Lx-2,Lx) + 1; jup = mod(j,Ly) + 1; jdown = mod(j+Ly-2,Ly) + 1; DE = 2.0*spin_old*(Sij(iright,j) + Sij(ileft,j) + Sij(i,jup) + Sij(i,jdown)); if ( DE < 0 ) %Acepto Sij(i,j) = spin_new; DEc = DEc + DE; dM = dM + (spin_new - spin_old); else %tiro un numero al azar entre 0 y 1 p = rand() ; expbetaE = exp(-beta*DE); if( p < expbetaE ) % acepto Sij(i,j) = spin_new; DEc = DEc + DE; dM = dM + (spin_new - spin_old); end end end % cierro loop j end % cierro loop i