for n=0.01:0.02
for a=1:3
Abs_raw=Absorbance_simuV5(Ts,Xs,S0);
Tmin=500; Tmax=2000; Xstart=0.15;
flag_firstrun=true;
Xold=Xstart;
Xopt=Xold;
options.TolX = 0.1; count=0; Resiset=zeros(30,1);
S_error=S0.*(1+n*(rand(size(S0))-0.5));
for i=1:30
[Topt,yy]=fminbnd(@fun_V5,Tmin,Tmax,options);
Resiset(i)=yy;
if(flag_firstrun)
flag_firstrun=false;
else
if((abs(Xold-Xopt)<1.0E-3)&&(abs(Topt-Told)<1))
count=count+1;
else
count=0;
end
end
Abs_test=Absorbance_simuV5(Topt,Xold,S_error);
Told=Topt; Xold=Xopt;
disp([i,count,Topt,Xopt]);
if(count>3)
break;
end
end
tem(a,1)=Topt; concern(a,1)=Xopt;
end
A=[tem(:,1) concern(:,1)];
end
这个最简单的办法就是用一个空矩阵,不断循环追加数据到每一行:
% 这里我建议先设置一个空的矩阵A_store
A_store = [];
for n=0.01:0.02
for a=1:3
Abs_raw=Absorbance_simuV5(Ts,Xs,S0);
Tmin=500; Tmax=2000; Xstart=0.15;
flag_firstrun=true;
Xold=Xstart;
Xopt=Xold;
options.TolX = 0.1; count=0; Resiset=zeros(30,1);
S_error=S0.*(1+n*(rand(size(S0))-0.5));
for i=1:30
[Topt,yy]=fminbnd(@fun_V5,Tmin,Tmax,options);
Resiset(i)=yy;
if(flag_firstrun)
flag_firstrun=false;
else
if((abs(Xold-Xopt)<1.0E-3)&&(abs(Topt-Told)<1))
count=count+1;
else
count=0;
end
end
Abs_test=Absorbance_simuV5(Topt,Xold,S_error);
Told=Topt; Xold=Xopt;
disp([i,count,Topt,Xopt]);
A_store = [A_store; [i,count,Topt,Xopt]]; % 我把每次循环的数据放在A_store中可以去看
if(count>3)
break;
end
end
% tem(a,1)=Topt; concern(a,1)=Xopt;
end
% A=[tem(:,1) concern(:,1)];
end
A_store(:,3:4) %A_store的第三列和第四列就是每次循环存储的Topt,Xopt