How to save the results after 100 times run

조회 수: 2 (최근 30일)
tao
tao 2019년 8월 21일
답변: AbioEngineer 2019년 8월 21일
Hello, I need to save the results after 100 times run the code below.
The code runs without error but how can I save the results for "variable L" as excel file output?
Any help will be highly appreciated!
for n = 1: 100;
clc;clear;clf;
lam=1.7;
u=11*42*60/6000;
r1=lam;tr1=60;r2=lam;tr2=0;r3=lam;tr3=0;
s1=3;ts1=60;s2=3;ts2=0;s3=3;ts3=0;
R=[ r1 tr1;
r2 tr2;
r3 tr3];
S=[s1 ts1;
s2 ts2;
s3 ts3];
dddt=[];
rn=length(R(:,1));
for i=1:rn
dt{i}=[];
end
for i=1:rn
while sum(dt{i})<R(i,2)*60
dt{i}=[dt{i} exprnd(R(i,1),1,1)];
end
end
for i=1:rn
dddt=[dddt dt{i}];
end
d=cumsum(dddt);
N=length(d);
wt=zeros(1,N);
mm=zeros(1,s1);
sn=length(S(:,1));
plf=[];
ft=exprnd(u,1,N);
f1=zeros(length(d),s1);
for i=1:s1
f1(i,i)=1;
end
k=0;kk=0;
for i=s1+1:N
llf=[];
lf=zeros(1,s1);
if d(i)>(ts1+ts2)*60
e=find(f1(i-1,:)==2);
for ii=1:N
f1(ii,e)=0;
end
end
for j=1:s1
if max(f1(1:i-1,j))==0
lf(j)=0;
elseif max(f1(1:i-1,j))==1
mm(j)=max(find(f1(1:i-1,j)==1));
lf(j)=d(mm(j))+ft(mm(j))+wt(mm(j));
elseif max(f1(1:i-1,j))==2
lf(j)=inf;
end
if lf(j)==0&&k<s1-s2&&d(i)>ts1*60&&d(i)<(ts1+ts2)*60
k=k+1;
for ii=1:N
f1(ii,j)=2;
end
end
if lf(j)>0&&lf(j)<d(i)&&k<s1-s2&&d(i)>ts1*60&&d(i)<(ts1+ts2)*60
k=k+1;
for ii=1:N
f1(ii,j)=2;
end
end
if lf(j)>d(i)&&k<s1-s2&&d(i)>ts1*60&&d(i)<(ts1+ts2)*60
llf=[llf ;[lf(j) j]];
end
end
if length(llf)~=0
slf=sortrows(llf,1);
if k<s1-s2
for jj=1:s1-s2-k
for ii=1:N
f1(ii,slf(jj,2))=2;kk=kk+1;
end
end
end
k=k+kk;
end
if min(lf)<=d(i)
Tn{i}=find(lf<d(i));
a=randperm(length(Tn{i}));
f1(i,Tn{i}(a(1)))=1;wt(i)=0;
else
b=find(lf(:)==min(lf));
f1(i,b)=1;wt(i)=min(lf)-d(i);
end
fff=f1(i,:);
tlf=[lf f1(i,:) d(i) ft(i) wt(i)];
plf=[plf;tlf];
end
ttts=sort([d'+ft'+wt']);
Td=[[1:N]' d'];Ts=[[1:N]' ttts];
plot(Td(:,2),Td(:,1))
title('arrival/blue+left/red')
xlabel('time/m')
ylabel('number/vehicle')
hold on
plot(Ts(:,2),Ts(:,1),'r')
tss=cumsum(S(:,2)).*60;
for i=1:3
hold on
plot([tss(i) tss(i)],[0 N],'g')
end
axis([0,4000,0,8000])
plot([11*60 11*60],[0 N],'r')
Pwait=mean(wt)
stayti=[d' d'+wt' d'+wt'+ft'];
for t=1:ceil(d(end))
L(t)=0;
for i=1:N
if stayti(i,1)~=stayti(i,2)&&stayti(i,1)<=t&&stayti(i,2)>=t
L(t)=L(t)+1;
end
end
end
PTL=mean(L)
PL(1)=mean(L(1:ts1*60));
PL(2)=mean(L(ts1*60+1:(ts1+ts2)*60));
PL(3)=mean(L((ts1+ts2)*60+1:(ts1+ts2+ts3)*60));
PL
figure(2)
hold on
plot(L)
title('queue length')
xlabel('time/m')
ylabel('number/vihicle')
end

답변 (1개)

AbioEngineer
AbioEngineer 2019년 8월 21일
Hi!
There are many things you can do to save as an excel document. It appears you have preset your for loop to run 100 times, so you don't have to add a condition like "if n==100, save the file" or many other options.
If you just want to save a variable: save using save, and load using load. Save filename with the extension .mat
save(filename,variables)
If you want to save an array of things in excel format: after your for loop ends, simply combine the data you wish to export into an array like a cell array for text, or a simple double or float array for numbers.
filename = 'your_filename_here.xlsx';
firstROWtitles = {'title_column_1','title_column_2','title_column_3'}
A = num2cell([1; 2; 3; 4; 5; 6; 7; 8]); % or whatever numbers you want to put
B = cell(8,1); % whatever text you want to put
C = cell(8,1); % even more whatever you want to put
files=[firstROWtitles;[A B C]]
xlswrite(filename,files)

카테고리

Help CenterFile Exchange에서 Tables에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by