016 MATLAB Montecarlo.m & Ising Model.m
Montecarlo.m
n_grid = 100; % 배열의 크기
M=[]; % 총 magnetic field
E=[]; % 총 에너지a=1;for i=[1e-10 1 1.5 2 2.5 3 3.5 4 4.5],% 온도를 임의로 넣는다.(Monte Carlo Method로 랜덤하게 넣을 수 도 있으나 온도에 따라 비교하기 위해 임의로 설정하였다.) T =i; % 온도를 설정하여 그래프를 그림 [M, E] = isingmodel(n_grid, T,a); % 실제 simulations a=a+1;end
% 몬테카를로 시뮬레이션은 ising model을 이용한 것으로 아래의 ising 모델의 임의의 함수를 정의가 먼저 필요하다.
Ising medel은 온도의 확산 엔트로피의 증가를 시뮬레이션으로 보여줄 수 있는 방법이다.
|
function [M, E] = isingmodel(N,T,a)
k = 1; % J에 포함된 상수 서로 상쇄되어 사라지기 때문에 1로 둔다.
Ms = [];
Es = [];
grid = -ones(N); % 초기 spin 상태 처음상태를 -1상태로 시작
subplot(3,3,a)
for i=1:100,
J = 1; % 분자간 상호작용 에너지(임의로 1로 두고 계산)
pause(0) % 변하는 모습을 보기위한 시간지연
neighbors = circshift(grid, [ 0 1]) + ...
circshift(grid, [ 0 -1]) + ...
circshift(grid, [ 1 0]) + ...
circshift(grid, [-1 0]); % Ising model을 기반으로 에너지 계산을 위한 알고리즘
DeltaE=2*J * (grid .* neighbors); % spin이 바뀔 경우에 변하는 에너지
p_trans=exp(-DeltaE./(k.*T)); % spin이 변화될 확률
transitions = ((rand(N) < p_trans).*(rand(N)<0.1)*-2)+1; % 랜덤함수를 도입하여 변화를 결정 0.1보다 작다는 조건을 도입한 이유는 실제 스핀변화에 대한 process를 늦추기 위해 도입
grid = grid .* transitions; % 배열의 변화
M = sum(sum(grid)); % 시스템의 magnetic field
E = -sum(sum(DeltaE))/2; % 시스템의 에너지
image((grid+1)*128); % plot
xlabel(sprintf('T = %0.2f, M = %0.2f, E = %0.2f', T, M/N^2, E/N^2));
set(gca,'YTickLabel',[],'XTickLabel',[]);
axis square; colormap bone; drawnow;
end
댓글
댓글 쓰기