MM1排队系统仿真matlab实验报告

时间:2024.4.14

M/M/1排队系统实验报告

一、实验目的

本次实验要求实现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比。

二、实验原理

根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模式、服务模式、服务员数量以及服务规则等因素决定的。

1、       顾客到达模式

设到达过程是一个参数为的Poisson过程,则长度为的时间内到达个呼叫的概率 服从Poisson分布,即,其中>0为一常数,表示了平均到达率或Poisson呼叫流的强度。

2、       服务模式

设每个呼叫的持续时间为,服从参数为的负指数分布,即其分布函数为

3、       服务规则

先进先服务的规则(FIFO)

4、       理论分析结果

在该M/M/1系统中,设,则稳态时的平均等待队长为,顾客的平均等待时间为

三、实验内容

M/M/1排队系统:实现了当顾客到达分布服从负指数分布,系统服务时间也服从负指数分布,单服务台系统,单队排队,按FIFO方式服务。

四、采用的语言

MatLab语言

源代码:

clear;

clc;

%M/M/1排队系统仿真

SimTotal=input('请输入仿真顾客总数SimTotal='); %仿真顾客总数;

Lambda=0.4;     %到达率Lambda;

Mu=0.9;         %服务率Mu;

t_Arrive=zeros(1,SimTotal);

t_Leave=zeros(1,SimTotal);

ArriveNum=zeros(1,SimTotal);

LeaveNum=zeros(1,SimTotal);

Interval_Arrive=-log(rand(1,SimTotal))/Lambda;%到达时间间隔

Interval_Serve=-log(rand(1,SimTotal))/Mu;%服务时间

t_Arrive(1)=Interval_Arrive(1);%顾客到达时间

ArriveNum(1)=1;

for i=2:SimTotal

    t_Arrive(i)=t_Arrive(i-1)+Interval_Arrive(i);

    ArriveNum(i)=i;

end

t_Leave(1)=t_Arrive(1)+Interval_Serve(1);%顾客离开时间

LeaveNum(1)=1;

for i=2:SimTotal

    if t_Leave(i-1)<t_Arrive(i)

        t_Leave(i)=t_Arrive(i)+Interval_Serve(i);

    else

        t_Leave(i)=t_Leave(i-1)+Interval_Serve(i);

    end

    LeaveNum(i)=i;

end

t_Wait=t_Leave-t_Arrive; %各顾客在系统中的等待时间

t_Wait_avg=mean(t_Wait);

t_Queue=t_Wait-Interval_Serve;%各顾客在系统中的排队时间

t_Queue_avg=mean(t_Queue);

Timepoint=[t_Arrive,t_Leave];%系统中顾客数随时间的变化

Timepoint=sort(Timepoint);

ArriveFlag=zeros(size(Timepoint));%到达时间标志

CusNum=zeros(size(Timepoint));

temp=2;

CusNum(1)=1;

for i=2:length(Timepoint)

    if (temp<=length(t_Arrive))&&(Timepoint(i)==t_Arrive(temp))

        CusNum(i)=CusNum(i-1)+1;

        temp=temp+1;

        ArriveFlag(i)=1;

    else

        CusNum(i)=CusNum(i-1)-1;

    end

end

%系统中平均顾客数计算

Time_interval=zeros(size(Timepoint));

Time_interval(1)=t_Arrive(1);

for i=2:length(Timepoint)

    Time_interval(i)=Timepoint(i)-Timepoint(i-1);

end

CusNum_fromStart=[0 CusNum];

CusNum_avg=sum(CusNum_fromStart.*[Time_interval 0] )/Timepoint(end);

QueLength=zeros(size(CusNum));

for i=1:length(CusNum)

    if CusNum(i)>=2

        QueLength(i)=CusNum(i)-1;

    else

        QueLength(i)=0;

    end

end

QueLength_avg=sum([0 QueLength].*[Time_interval 0] )/Timepoint(end);%系统平均等待队长

%仿真图

figure(1);

set(1,'position',[0,0,1000,700]);

subplot(2,2,1);

title('各顾客到达时间和离去时间');

stairs([0 ArriveNum],[0 t_Arrive],'b');

hold on;

stairs([0 LeaveNum],[0 t_Leave],'y');

legend('到达时间','离去时间');

hold off;

subplot(2,2,2);

stairs(Timepoint,CusNum,'b')

title('系统等待队长分布');

xlabel('时间');

ylabel('队长');

subplot(2,2,3);

title('各顾客在系统中的排队时间和等待时间');

stairs([0 ArriveNum],[0 t_Queue],'b');

hold on;

stairs([0 LeaveNum],[0 t_Wait],'y');

hold off;

legend('排队时间','等待时间');

%仿真值与理论值比较

disp(['理论平均等待时间t_Wait_avg=',num2str(1/(Mu-Lambda))]);

disp(['理论平均排队时间t_Wait_avg=',num2str(Lambda/(Mu*(Mu-Lambda)))]);

disp(['理论系统中平均顾客数=',num2str(Lambda/(Mu-Lambda))]);

disp(['理论系统中平均等待队长=',num2str(Lambda*Lambda/(Mu*(Mu-Lambda)))]);

disp(['仿真平均等待时间t_Wait_avg=',num2str(t_Wait_avg)])

disp(['仿真平均排队时间t_Queue_avg=',num2str(t_Queue_avg)])

disp(['仿真系统中平均顾客数=',num2str(CusNum_avg)]);

disp(['仿真系统中平均等待队长=',num2str(QueLength_avg)]);

五、数据结构

1.仿真设计算法(主要函数)

利用负指数分布与泊松过程的关系,产生符合泊松过程的顾客流,产生符合负指数分布的随机变量作为每个顾客的服务时间:

Interval_Arrive=-log(rand(1,SimTotal))/Lambda;%到达时间间隔,结果与调用exprnd(1/Lambdam)函数产生的结果相同

Interval_Serve=-log(rand(1,SimTotal))/Mu;%服务时间间隔

t_Arrive(1)=Interval_Arrive(1);%顾客到达时间

时间计算

t_Wait=t_Leave-t_Arrive; %各顾客在系统中的等待时间

t_Queue=t_Wait-Interval_Serve; %各顾客在系统中的排队时间

由事件来触发仿真时钟的不断推进。每发生一次事件,记录下两次事件间隔的时间以及在该时间段内排队的人数:

Timepoint=[t_Arrive,t_Leave]; %系统中顾客数变化

CusNum=zeros(size(Timepoint));

CusNum_avg=sum(CusNum_fromStart.*[Time_interval 0] )/Timepoint(end); %系统中平均顾客数计算

QueLength_avg=sum([0 QueLength].*[Time_interval 0] )/Timepoint(end); %系统平均等待队长

2.算法的流程图


六、仿真结果分析

顾客的平均等待时间与顾客的平均等待队长,计算其方差如下:

从上表可以看出,通过这种模型和方法仿真的结果和理论值十分接近,增加仿真顾客数时,可以得到更理想的结果。但由于变量定义的限制,在仿真时顾客总数超过1,500,000时会溢出。证明使此静态仿真的思想对排队系统进行仿真是切实可行的。

实验结果截图如下(SimTotal分别为100、1000、10000、100000):

(仿真顾客总数为100000和1000000时,其图像与10000的区别很小)

七、遇到的问题及解决方法

1.在算法设计阶段对计算平均队长时对应的时间段不够清楚,重新画出状态转移图后,引入变量Timepoint用来返回按时间排序的到达和离开的时间点,从而得到正确的时间间隔内的CusNum,并由此计算出平均队长。

2.在刚开始进行仿真时仿真顾客数设置较小,得到的仿真结果与理论值相差巨大,进行改进后,得到的结果与理论值相差不大。

3.刚开始使用exprnd(Mu,m)产生负指数分布,但运行时报错,上网查找资料后找到替代方法:改成Interval_Serve=-log(rand(1,SimTotal))/Mu;方法生成负指数分布,运行正常。

八、实验心得

通过本次实验我对M/M/1单窗口无限排队系统有了更深的认识,同时对MatLab编程语言更加熟悉,并了解到仿真在通信网中的重要作用。此次实验我受益匪浅。


第二篇:信号与系统matlab仿真实验报告


信号与系统

matlab项目设计报告

院(系) 电子信息与电气工程系 专 业 通信工程 班 级 08通信2班 学生姓名 林芸、李玲 学 号 0805070316 0805070361

1、 项目题目

y''(t)+5y'(t)+6y(t)=f(t)其中f(t)=e-t ,ε(t)试利用 连续系统的微分方程为 ,

MATLAB画出系统的零状态响应y(t),t≥0。

2、 项目目的

通过matlab仿真,计算常微分方程式的解,从而求出系统的零状态响应,并通过软件画图。

3、 项目原理

对于求方程的零状态响应,即是求解常微分方程。Matlab解常微分方程式的语法是dsolve('equation','condition'),其中equation代表常微分方程式即y'=g(x,y),且须以Dy代表一阶微分项y' D2y代表二阶微分项y'',condition则为初始条件。

4、 设计思路

利用MATLAB中dsolve命令,这是一个求解常微分方程的语法,直接得出零状态响应的结果。再通过ezplot指令绘制函数图。

5、 程序代码

>>yzs=dsolve('D2y+5*Dy+6*y=exp(-t)','y(0)=0,Dy(0)=0')

// dsolve('equation','condition')求解常微分方程式

>> ezplot(yzs,[0 8]); //表示在0<x<8绘制显函数f=f(x)的函数图

6、 调试过程、结果及分析

在程序中输入yzs=dsolve('D2y+5*Dy+6*y=exp(-t)','y(0)=0,Dy(0)=0')

所得结果如下:

yzs =

1/exp(t) - 2/exp(2*t) + 1/exp(3*t)

1

输入ezplot(yzs,[0 8]);所得图形如下:

7、 项目总结

本次信号与系统课程通过matlab软件进行仿真,我们再一次学习了matlab数学软件,对程序的使用有了更深的印象与理解。通过matlab能够非常方便的求解系统的零状态响应,节省了大量时间去计算,同时它可以方便的绘制出图形,使我们可以直观的观察系统的零状态响应。这次项目设计让我们对信号与系统这门课程有了更深的理解。

信号与系统matlab仿真实验报告

2

更多相关推荐:
matlab仿真实验报告

Matlab仿真实验报告1实验一数字信号的FFT分析大概在第10周1实验内容及要求1离散信号的频谱分析设信号xn0001cos045nsin03ncos0302n4此信号的03pi和0302pi两根谱线相距很近...

matlab仿真实验报告

20xx211208班08211106号史永涛班内序号01MatLab仿真试验报告实验一数字信号的FFT分析一实验目的通过本次实验应该掌握1用傅立叶变换进行信号分析时基本参数的选择2经过离散时间傅立叶变换DTF...

《机械工程控制基础》Matlab仿真实验报告单(实验二) - 副本

红河学院工学院实验报告单机械工程控制基础Matlab仿真实验报告单课程名称机械工程控制基础实验姓名日期20xx126成绩年级专业20xx级机械工程学号20xx01030415实验场地任美福楼222实验二一阶二阶...

Matlab综合实验报告

重庆交通大学学生实验报告实验课程名称开课实验室学院20xx年级通信工程专业2班学生姓名周丙相学号MATLAB编程与系统仿真评分标准目录实验一随机信号峰均功率的求法及其比较4一实验内容及要求4二程序仿真流程图4三...

《Matlab与机电系统仿真》实验报告三

Matlab与机电系统仿真实验报告三班级电气121姓名李凡学号20xx06010116一实验名称Simulink建模与仿真4一实验目的1掌握Simulink建模与仿真的基本方法2熟悉Simulink基本模块库及...

北邮数字信号处理Matlab仿真实验

数字信号处理Matlab实验一离散信号的FFT分析知识点利用FFT对信号频谱进行分析用DFT进行信号分析时基本参数的选择以及信号经过离散时间傅立叶变换DTFT和有限长度离散傅立叶变换DFT后信号频谱上的区别实验...

本部《Matlab与控制系统仿真》实验指导书

机电工程学院Matlab控制系统仿真实验指导书学院班级姓名学号温州大学机电工程学院制温州大学机电学院实验实训指导书实验一MATLAB语言基本命令1实验目的1掌握科学计算的有关方法熟悉MATLAB语言及其在科学计...

东南大学自控实验五:MatlabSimulink仿真实验 - 副本

实验五MatlabSimulink仿真实验一实验目的1学习系统数学模型的多种表达方法并会用函数相互转换2学习模型串并联及反馈连接后的系统传递函数3掌握系统BODE图根轨迹图及奈奎斯特曲线的绘制方法并利用其对系统...

北邮MATLab仿真实验报告DSP

北京邮电大学MATLAB仿真实验报告实验日期20xx年12月实验一数字信号的FFT分析1实验内容及要求1离散信号的频谱分析设信号xn0001cos045nsin03ncos0302n4此信号的03pi和0302...

东南大学自控实验报告 Matlab-Simulink_仿真实验

东南大学仪器科学与工程学院学院实验报告课程名称自动控制原理实验名称MatlabSimulink仿真实验院系仪器科学与工程学院专业测控技术与仪器姓名刘XX学号220xxXX实验室机电实验平台实验组别同组人员实验时...

matlab音乐处理合成实验报告

MATLAB高级编程与工程应用语音合成综合实验姓名班级学号日期121简单的合成音乐1请根据东方红片断的简谱和十二平均律计算出该片断中各个乐音的频率在MATLAB中生成幅度为1抽样频率为8kHz的正弦信号表示这些...

Matlab实验报告一

数学与信息科学系实验报告实验名称程序设计所属课程数学软件与实验实验类型综合型实验专业信息与计算科学班级20xx级1班学号姓名指导教师1234567

matlab仿真实验报告(13篇)