资源简介
本人物理学生,被迫编程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
- 上一篇:基于MATLAB深度极限学习机与代码
- 下一篇:基于matlab的傅里叶频域滤波
评论
共有 条评论