• 大小: 2KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: Matlab
  • 标签: Ising模型  

资源简介

本人物理学生,被迫编程Ising的2D模型。。。(哭泣),在浏览网上大部分的程序后,个人认为我的模型具有较好的拟合性,而且由于不是编程大佬,我的备注也比较详细,缺点是由于格点数取了10000个,运算时间较长

资源截图

代码片段和文件信息

%第一次用matlab,物理系学生,没有系统的接触过编程,不是很熟悉,很多算法很冗杂,甚至有些公式不是很精确,望见谅
%缺点:循环有两个,运算较慢
%建立一个随机矩阵,再选取任意一点比较反向和不反向的能量差别,确定是否翻转
clear all
S=2*(randi([01]100100)-0.5)%建立随机1,-1矩阵,由于是伪随机数,可能有很大误差
 J=1 
 H=0.2

for l=1:9 
x=[400600800100012001400160018002000]
T=x(l)
 E=0
 
 for t=1:6500
  i=randi([299])%忽略边界,如果需要讨论,分别取ij等于1100即可
  j=randi([299])
  a=[i-1j;i+1j;ij-1;ij+1]
  %随机取一个相邻原子
  b=randi([14])
  c=a(b:)
  i1=c(1)
  j1=c(2)
 Energybefore=-J*S(ij)*S(i1j1)-H*S(ij)*S(i1j1)
 Energyafter=J*S(ij)*S(i1j1)+H*S(ij)*S(i1j1)
 Energydifference=Energyafter-Energybefore
 p=1/(1+exp(Energydifference/T));
      if (Energydifference<0)
         S(ij)=-S(ij)
          e=p*Energyafter+(1-p)* Energybefore%期望值    
          
      else S(ij)=S(ij)
          e=Energybefore;
      end
     
      if t>1000 %1000次以后可以认为达到了热平衡
          E=E+e/5500
      end
 end
  if (l==1)
      E1=E
      S1=S
  elseif (l==2)
      E2=E
      S2=S
          elseif (l==3)
          E3=E
          S3=S
              elseif (l==4)
              E4=E
              S4=S
       

评论

共有 条评论