我试着循环寻找答案,但我只能找到矢量整个双循环,这不是我需要的(除非我的程序可以)。我也尝试为T值制作一个for循环,但我无法对结果进行矢量化。我相信这篇文章会很有用,因为它引入了2D Ising模型,它在Matlab中作为初学者的练习非常受欢迎。我找到了很多这个问题的解决方案,但我真的想按照自己的方式去做。这是我的问题:
程序的输出仅为一个温度T = 0.5的meanE。但我的目标是接收一个填充meanE的向量(meanE的每个值必须与不同的温度相对应)。温度范围必须为T = -0.1:2.7:100。 T出现在“if”状态。非常感谢您的帮助。等不及你的建议。
tic
N=10;
T=0.5;
n=3000;
t=rand(N+4);
t(t>0.5)=+1;
t(t<0.5)=-1;
% Bounary condidtions. Here we will use "technical" matrix N+4xN+4
% and on its basis we will be doing further calculations for
% our "mian" matrix NxN
t(2:N+3,2)=t(2:N+3,N+2); t(2:N+3,3)=t(2:N+3,N+3);
t(2,2:N+3)=t(N+2,2:N+3); t(3,2:N+3)=t(N+3,2:N+3);
t(2:N+3,4)=t(2:N+3,N+4); t(2:N+3,1)=t(2:N+3,N+1);
t(1,2:N+3)=t(N+1,2:N+3); t(4,2:N+3)=t(N+4,2:N+3);
E=zeros(n,1);
for r=1:n
% t_flipped is t matrix with one randomly flipped spin
t_flipped=t;
rs = randi([3, N+2], [1, 2]);
t_flipped(rs(1,1),rs(1,2))=-t(rs(1,1),rs(1,2));
% E is the total energy of NxN matrix derived from t matrix
% It is not necessary to calculate total energy of matrix with
% flipped spin, so there is no formula for this operation
E_elements=2*t(3:N+2,3:N+2).*t(3:N+2,4:N+3)+2*t(3:N+2,3:N+2).*t(4:N+3,3:N+2);
E(r)=-sum(E_elements(:));
% We calculate energy difference dE between two considered matrices
% using submatrices u and f that contain element with unfliped(u)/flipped(f)
% spin and his nearest neighbours
u=t(rs(1,1)-2:rs(1,1)+2,rs(1,2)-2:rs(1,2)+2);
f=t_flipped(rs(1,1)-2:rs(1,1)+2,rs(1,2)-2:rs(1,2)+2);
Energy_u_elements=u(2:4,2:4).*u(2:4,3:5)+u(2:4,2:4).*u(2:4,1:3)+...
u(2:4,2:4).*u(3:5,2:4)+u(2:4,2:4).*u(1:3,2:4);
Energy_u=-sum(Energy_u_elements(:));
Energy_f_elements=f(2:4,2:4).*f(2:4,3:5)+f(2:4,2:4).*f(2:4,1:3)+...
f(2:4,2:4).*f(3:5,2:4)+f(2:4,2:4).*f(1:3,2:4);
Energy_f=-sum(Energy_f_elements(:));
dE=Energy_f-Energy_u;
% Acceptance condition
if dE<0 || rand(1)<exp(-dE/T)
t(rs(1,1),rs(1,2))=-t(rs(1,1),rs(1,2));
end
end
meanE= sum(E(n*0.6:n))/(n-n*0.6)
toc
我添加了一些评论。希望有所帮助。但是真的有必要了解整个计划吗?这是物理问题,遗憾的是这些糟糕的矩阵相关公式是必要的。
程序有一个输出,这是一个固定T(温度)的meanE。所以我需要做一个for循环,所以我可以接收不同T值的其他meanE值(范围是T = -0.1:2.7:100)就是这样。请告诉我还有什么我应该解释或更清楚。当然非常感谢您的建议。