MATLAB读写excel中指定sheet行列中的数据

%% 参考陆传X《排队论》第二版[M].北京邮电大学出版社,2009,p72-76
%%=================初始化并赋初值================
clc;clear all
    numda=xlsread('data1.xlsx','sheet1','b2:b12');
    mu=xlsread('data1.xlsx','sheet1','c2:c12');
    n=xlsread('data1.xlsx','sheet1','d2:d12');
    m=xlsread('data1.xlsx','sheet1','e2:e12');
    %Lqq=AA('sheet1','f2:f12')';
    %Wqq=AA('sheet1','g2:g12')';
%numda=2.5392;   %numda表示排队模型M/M/n/m中,产品到达速率
%mu=0.94;   %mu表示工站中某一台设备的加工速率
%n=3;         %n表示某个工站中并联加工设备的数量
%m=15;         %m表示缓冲区大小(和ARENA中“NQ(xxx.Queue)<N”的关系为N=m-n,或者:m=N+n)
ro=numda./(n.*mu);   %ro表示工站负荷水平或强度(ro=ro1/n)。
%============计算ro===========
if ro~=1
    sum = 0;
    for k = 0:n-1 % 循环变量根据需要改吧
      sum = sum+((n.*ro).^k)/(factorial(k));
    end
    P0=(sum+((n.*ro).^n).*(1-(ro.^(m-n+1)))./(factorial(n).*(1-ro))).^(-1);  %计算p0表示饥饿概率
    Pm=((n.^n).*(ro.^m).*P0)./factorial(n);   %pm表示缓冲区为m时的阻塞概率
    wq=((((n.^n).*(ro.^(n+1)).*P0)./( factorial(n).*((1-ro).^2).*numda.*(1-Pm))).*(1-(m-n+1).*(ro.^(m-n))+(m-n).*(ro.^(m-n+1)))); %平均排队等待时间
    p_loss=Pm;  %(1)系统损失率,与上面的pm相同。
    Q= 1-Pm;     %(2)系统相对通过能力
    numda1=numda.*Pm;    %(3)单位时间平均损失的产品数量
    numdae=numda.*(1-Pm);    % (3)平均进入系统的产品数量
    n_busy=numdae./mu;     %(4)平均忙着的设备数量
    Lq=((n.^n).*(ro.^(n+1)).*P0.*(1-(m-n+1).*(ro.^(m-n))+(m-n).*(ro.^(m-n+1))))./(factorial(n).*((1-ro).^2));   %(5)平均排队等待数量(排队等待队长)
    Ls=Lq+(numdae./mu);   %(6)平均队长(即平均产品数量)
    Wq=Lq./numdae;    %(7)平均排队等待时间
    Ws=Wq+(1./mu);     %(7)产品在系统内平均逗留时间

%===========================显示结果================================
    %disp(['P0(饥饿概率/系统空闲率)=' num2str(P0)]);
   % disp(['Q(系统相对通过能力)=' num2str(Q)]);
   % disp(['numda1(单位时间平均损失的产品数量)=' num2str(numda1)]);
   % disp(['numdae(平均进入系统的产品数量)=' num2str(numdae)]);
   % disp(['Pm(缓冲区为m时的阻塞概率)=' num2str(Pm)]);
    % disp(['n_busy(平均忙着的设备数量)=' num2str(n_busy')]);
   %  disp(['Ls(平均队长)=' num2str(Ls')]);
    % disp(['Lq(平均等待队长)=' num2str(Lq')]);
   %  disp(['Ws(平均逗留时间)=' num2str(Ws')]);

else
    sum = 0;
    for k = 0:n-1 % 循环变量根据需要改吧
      sum = sum + (n^k)/(factorial(k));
    end
    P0=(sum+(n^n)*(m-n+1))/(factorial(n))^(-1)      %p0表示排队模型M/M/n/m中,饥饿率
end
%Lqerror=abs((Lqq-Lq))./Lqq;
%Wqerror=abs((Wqq-Wq))./Wqq;
 %disp(['Lq(平均排队等待数量)=' num2str(Lq)])
% disp(['Lqerror(平均排队等待数量误差)=' num2str(Lqerror)])
 % disp(['Wq(平均排队等待时间)=' num2str(Wq)])
  %disp(['Wqerror(平均排队等待时间误差)=' num2str(Wqerror)])
  xlswrite('data1.xlsx',Wq,'Sheet1','f2:f12');
  xlswrite('data1.xlsx',Lq,'Sheet1','g2:g12');
  xlswrite('data1.xlsx',ro,'Sheet1','h2:h12');
  xlswrite('data1.xlsx',n_busy,'Sheet1','i2:i12');
WWq=xlsread('data1.xlsx','sheet1','j2:j12');  %读取excel表中arena仿真得到的数据,区别与matlab计算获得的Wq.
LLq=xlsread('data1.xlsx','sheet1','k2:k12');
rro=xlsread('data1.xlsx','sheet1','l2:l12');
nn_busy=xlsread('data1.xlsx','sheet1','m2:m12');
error_Wq=abs(100*(WWq-Wq))./WWq;
error_Lq=abs(100*(LLq-Lq))./LLq;
error_ro=abs(100*(rro-ro))./rro;
error_n_busy=abs(100*(nn_busy-n_busy))./nn_busy;
%将误差数据写入excel表中,以方便word直接复制。
xlswrite('data1.xlsx',error_Wq,'Sheet1','n2:n12');
xlswrite('data1.xlsx',error_Lq,'Sheet1','o2:o12');
xlswrite('data1.xlsx',error_ro,'Sheet1','p2:p12');
xlswrite('data1.xlsx',error_n_busy,'Sheet1','q2:q12');
  • 9
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值