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

댓글

이 블로그의 인기 게시물

타로카드 구성과 간략한 해석 (입문)

타로카드 점치는 방법 켈틱크로스 변형!

타로카드 리딩? [메뉴얼 텍스트 리딩 VS 이미지 리딩]