这是我在 Linux 系统下用永中 OFFICE2009 写下的!
function[maxque,mwait_t,mstay_t,queue_l,use_rate]=MM1queue(mean_arr,mean_lea,peo_num)
status=zeros(3,peo_num);
%用一个 3 行矩阵表示每个顾客的状态;
%到达时间间隔,服务时间,等待时间;
status(1,=exprnd(mean_arr,1,peo_num);
%随机生成各顾客的到达间隔;
status(2,=exprnd(mean_lea,1,peo_num);
%随机生成各顾客的服务时间;
for i=2:peo_num
if status(1,i)<=status(2,i-1)+status(3,i-1)
status(3,i)=status(2,i-1)+status(3,i-1)-status(1,i);
else
status(3,i)=0;
end;
%对状态进行更新;
end;
arr_time=cumsum(status(1,);
status(1,:)=arr_time;
lea_time=sum(status);
stairs([0 arr_time],0:peo_num);
%绘出各顾客的到达时间图;
hold on;
stairs([0 lea_time],0:peo_num,'r');
%绘出各顾客的离去时间图;
legend('Arrive curve','leave curve',0)
hold off
figure;
plot(1:peo_num,status(3,:),'r:',1:peo_num,status(2,:)+status(3,:),'k-');
%绘出每个顾客的等待时间和停留时间;
legend('Wait Time','Stay Time',0);
n1=1;
n2=1;
mstay_t=(sum(status(2,:))+sum(status(3,:)))/peo_num;
mwait_t=mean(status(3,:));
%求平均停留时间和等待时间;
queue_num=zeros(1,2*peo_num+1);
queue_time=zeros(1,2*peo_num+1);
n3=1;
%while 循环求每个时间队列的长度;
while n1<=peo_num
n3=n3+1;
if arr_time(n1)<lea_time(n2)
queue_num(1,n3)=n1-n2+1;