⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gauss.m

📁 计算机仿真 报童问题的matlab实现
💻 M
字号:
%报童问题(高斯分布)%几个参数:%卖出报纸挣a元,退回报纸赔b元;%卖报量y,订报量z,订报量上限z_up;%观察期的总天数t,用于积累天数的ti;%总的平均损失量ave_loss,供过于求损失loss1,供小于求损失loss2,ave_loss=loss1+loss2;%最佳订报量superz,最小损失量ave_loss_min;function [superz,ave_loss_min]=gauss(t,z_up,a,b)   mu=input('请输入高斯分布的均值mu');                 %输入高斯分布均值mu   if isempty(mu)       mu=1000;   end   sigma=input('请输入高斯分布的标准差sigma');         %输入高斯分布标准差sigma   if isempty(sigma)       sigma=100;   end   y=round(normrnd(mu,sigma,1,t));                   %生成服从高斯分布的随机卖报量y(矢量)    ave_loss=zeros(1,z_up);                          %各种订报量情况下的损失统计(z_up个元素的矢量)     for z=1:z_up                                    %外层循环,z_up种情况,各种订报量         loss1=0;         loss2=0;        for ti=1:t                                   %内层循环,一共实验多少天          if z>y(ti)                                 %如果供大于求,说明要退报,赔钱               loss1=loss1+b*(z-y(ti));          elseif z<y(ti)                             %如果供小于求,说明还可以赚钱,报纸不够,少赚了钱               loss2=loss2+a*(y(ti)-z);          else                                       %如果订报量与卖报量相同,损失不变              loss1=loss1;              loss2=loss2;              end        end         ave_loss(z)=(loss1+loss2)/t;                %求每天的平均损失量     end     ave_loss_min=min(ave_loss)                      %显示最后的平均最小损失     superz=find(ave_loss==ave_loss_min)             %记录在给定a和给定b条件下的最佳订报量          figure(1)                                       %画给定a和b的时候的最佳订报量和最小平均损失关系曲线     plot(1:z_up,ave_loss,'b')     grid on     axis([0,1000,0,100])     xlabel('订报量/份')     ylabel('亏损/元')     title('亏损与订报量的关系曲线')           figure(2)                                      %每份报纸收益与最佳订报量的关系曲线     z_a=zeros(1,100);     n1=1;     for a_temp=0:0.01:1                             %收益a由0元递增至1元         for z=1:z_up                                %外层循环,z_up种情况,各种订报量           loss1=0;           loss2=0;              for ti=1:t                                %内层循环,一共实验多少天            if z>y(ti)                               %如果供大于求,说明要退报,赔钱               loss1=loss1+b*(z-y(ti));            elseif z<y(ti)                           %如果供小于求,说明还可以赚钱,报纸不够,少赚了钱               loss2=loss2+a_temp*(y(ti)-z);            else                                     %如果订报量与卖报量相同,损失不变              loss1=loss1;              loss2=loss2;            end        end         ave_loss(z)=(loss1+loss2)/t;                %计算平均损失       end     ave_loss_min=min(ave_loss);     z_a(n1)=find(ave_loss==ave_loss_min,1,'first'); %将每种a的最佳订报量放入z_a矢量      n1=n1+1;     end     a_temp=[0:0.01:1];     plot(a_temp,z_a,'b')     grid on     axis([0,1,0,1000])     xlabel('每份报纸净赚/元')     ylabel('最佳订报量/份')     title('每份报纸净赚与最佳订报量的关系曲线')          figure(3)                                          %每份报纸赔偿与最佳订报量的关系曲线     z_b=zeros(1,100);     n2=1;     for b_temp=0:0.01:1                                %赔偿b由0元递增至1元         for z=1:z_up                                   %外层循环,z_up种情况,各种订报量           loss1=0;            loss2=0;              for ti=1:t                                   %内层循环,一共实验多少天            if z>y(ti)                                  %如果供大于求,说明要退报,赔钱               loss1=loss1+b_temp*(z-y(ti));            elseif z<y(ti)                              %如果供小于求,说明还可以赚钱,报纸不够,少赚了钱               loss2=loss2+a*(y(ti)-z);            else                                        %如果订报量与卖报量相同,损失不变              loss1=loss1;              loss2=loss2;            end        end         ave_loss(z)=(loss1+loss2)/t;                   %计算平均损失       end     ave_loss_min=min(ave_loss);     z_b(n2)=find(ave_loss==ave_loss_min,1,'first');    %将每种赔偿b的最佳订报量放入z_b矢量       n2=n2+1;     end     b_temp=[0:0.01:1];     plot(b_temp,z_b,'b')     grid on     axis([0,1,0,1000])     xlabel('每份报纸赔偿/元')     ylabel('最佳订报量/份')     title('每份报纸赔偿与最佳订报量的关系曲线')end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -