不好意思啊,这个是我完整的程序。while循环没有执行,工作区显示的参数temp矩阵里全部是0,如果执行了while循环的话,temp矩阵里面应该是很多1。主要您能帮我看看这while循环里嵌套的这个for循环是不是有问题啊?谢谢您了。
clear
load sig1.mat;
x = sig1;
fs=20000;
down_sample_rate=0.25;
windowWidth=151;
nfft=1024;
F=down_sample_rate*fs;
minF=500;
maxF=2500;
[tfr,t1,f1]= MySTFT(x',fs,down_sample_rate,windowWidth,nfft,minF,maxF);
c=tfr;
[B,A]=size(c);
N=floor(A*B/4000);
%生成N个Climber
temp=zeros(B,A);%同型的度量矩阵
% for i=1:1:A*B
% if mod(i,4)==0
% temp(i)=1;
% end
% end
T=max(max(c))-min(min(c));%系统初始化温度
Tt=T; %系统当前温度
t=2; %系统当前时间
% for i=4000:4000:A*B %对每个climber做移动
while Tt>=T/1000%对时间t做循环
% i=4000:4000:A*B %对每个climber做移动
for i=4:4:A*B %对每个climber做移动
if mod(i,B)==0
heng=mod(i,B)+B;
else
heng=mod(i,B);
%计算climber的横坐标
zong=ceil(i/B); %计算climber的纵坐标 通过这两两句就定义了climber的坐标
end
p=sign(2*rand-1); %横坐标以0.5的等概率分别向左和右移动%这个是移动的长度
if heng==1
p=1;
elseif heng==B
p=-1;
end %排除边界条件
heng_new=heng+p;%不是边界条件的情况下按照这个公式进行移动
%纵坐标按规则移动
% p=sign(2*rand-1);
if zong==1
p=1;
elseif zong==A
p=-1;
end %排除边界条件
zong_new=zong+p;%不是边界条件的情况下按照这个公式进行移动
if c(heng_new,zong_new)>c(heng_new,zong)
temp(heng,zong)=0;
temp(heng_new,zong_new)=1;
else
pt=exp((c(heng_new,zong_new)-c(heng_new,zong))/Tt);
if(rand<=pt)
zong_new=zong+p;
temp(heng,zong)=0;
temp(heng_new,zong_new)=1;
else
zong_new=zong;
temp(heng,zong)=0;
temp(heng_new,zong_new)=1;
end
end
end
t=t+1;
Tt=T/log2(t);
end
figure;
[row,col,v]=find(temp==1);
plot(col,row);