实验报告14数学建模

  • 格式:doc
  • 大小:106.00 KB
  • 文档页数:7

《数学建模实验》实验报告 学号: 实验十四:计算机模拟 1.某报童以每份0.03元的价格买进报纸,以0.05元的价格出售. 根据长期统计,报纸每天的销售量及百分率为 销售量 200 210 220 230 240 250 百分率 0.10 0.20 0.40 0.15 0.10 0.05 已知当天销售不出去的报纸,将以每份0.02元的价格退还报社.试用模拟方法确定报童每天买进报纸数量,使报童的平均总收入为最大?

解答: 【1】模型假设: (1) 模拟时间充分大; (2) 报童购买报纸量介于销售量最小值与最大值之间; (3)不考虑有重大事件发生时卖报的高峰期,也不考虑风雨天气时卖报的低谷期. 【2】 符号假设

BUYMIN:每天的最小购买量

BUYMAX:每天的最大购买量

SIMUDAY:模拟时间 sell_amount:报童销售量 buy_amount: 报童购买量 percentage:销售百分率 ave_profit:总平均利润 loop_buy :当天购买量 loop_day :当天时间

【3】matlab程序如下: (1)首先建立m文件Getprofit.m function re=GetProfit(a,b) if a re=a*(0.05-0.03); else % 供过于求:报童购买量大于销售量 re=b*(0.05-0.03)+(a-b)*(0.02-0.03); end (2)建立主程序main.m BUYMIN=200; % 每天的最小购买量 BUYMAX=250; % 每天的最大购买量 SIMUDAY=1.0e+5; % 模拟时间 sell_amount=200:10:250; % 销售量 percentage=[0.1 0.3 0.7 0.85 0.95 1]; % 百分率 buy_amount=0; ave_profit=0; for loop_buy=BUYMIN:BUYMAX sum_profit=0; for loop_day=1:SIMUDAY index=find(percentage>=rand); % 产生随机数,用于决定当天的销售量 sum_profit=sum_profit+GetProfit(loop_buy,sell_amount(index(1))); end buy_amount=[buy_amount,loop_buy]; % 循环嵌套 ave_profit=[ave_profit,sum_profit/SIMUDAY]; % 循环嵌套 end buy_amount(1)=[]; % 第一个元素置空 ave_profit(1)=[]; [val,id]=max(ave_profit) % 显示最大平均收入val buy=buy_amount(id) % 显示在平均收入最大情况下的每天的购买量buy xlabel='每天的购买量'; ylabel='平均利润'; plot(buy_amount,ave_profit,'*:'); 【4】运行结果: val =4.2801 id =21 buy = 220 图像如下: 【5】结果分析: 该结果说明当报童每天买进报纸数量为220,报童的平均总收入为最大,且最大为4.2801.

2.某设备上安装有四只型号规格完全相同的电子管,已知电子管寿命为1000--2000小时之间的均匀分布。当电子管损坏时有两种维修方案,一是每次更换损坏的那一只;二是当其中一只损坏时四只同时更换。已知更换时间为换一只时需1小时,4只同时换为2小时。更换时机器因停止运转每小时的损失为20元,又每只电子管价格10元,试用模拟方法决定哪一个方案经济合理? 解答: 【1】 模型分析: 有两种方案[1]:ABCD四个灯全部换 [2]:ABCD四个灯不全换 【2】 模型程序 Matlab程序如下 x1=0; y1=0;%第一种方法用的钱 x2=0; y2=0;%第二种方法用的钱 ia=0;ib=0;ic=0;id=0;%分别为ABCD灯换的次数 A2=0;B2=0;C2=0;D2=0;%分别为ABCD灯用的总时间 m=50;%试验总次数 i=0;%已经进行试验次数 j=0;%第一种方法占优的次数 percent=0;%第一种方法占优占总次数的百分比 n=100000;%每次试验总时间 %下面共进行m轮试验比较全部换这种办法(办法1)用n个小时后和不全部换这种办法(办法2) %坚持同样的时间哪个更经济 while iwhile x1A=unifrnd(1000,2000,1,1); B=unifrnd(1000,2000,1,1); C=unifrnd(1000,2000,1,1); D=unifrnd(1000,2000,1,1); x=min(D,min(C,min(B,A))); x1=x1+x;%总时间 y1=y1+2*20+4*10; if A2 ia=ia+1;A2=A2+A; end if B2 ib=ib+1;B2=B2+B; end if C2 ic=ic+1;C2=C2+C; end if D2 id=id+1;D2=D2+D; end end y1;%输出n个小时后方法1所用的钱 y2=(ia+ib+ic+ic)*20+(ia+ib+ic+ic)*10;%输出n个小时后方法2所用的钱 if y1 j=j+1;%统计第一种办法占优的次数 end i=i+1; end m j percent=j/m 【3】运行结果: m = 50 j = 50 percent = 1 【4】结果分析 由此可以看出实验了m=50次,第一种办法占优了j=50次,占优率100%改变m或n也可得到类似的结果所以全部更换这种办法更好 3.导弹追踪问题:设位于坐标原点的甲舰向位于x轴上点A(1, 0)处的乙舰发射导弹,导弹头始终对准乙舰.如果乙舰以最大的速度(是常数)沿平行于y轴的直线行驶,导弹的速度是5,模拟导弹运行的轨迹.又乙舰行驶多远时,导弹将它击中? 解答: 【1】模型建立

假设导弹在t时刻的位置为))(),((tytxP,乙舰位于),1(0tvQ。由于导弹头始终对准乙

舰,故此时直线PQ就是导弹的轨迹曲线弧OP在点P处时的切线.

即有xytvy1'0,即yyxtv')1(0 (1) 又根据题意,弧OP的长度为AQ的5倍,即有tvdxyx0025'1 (2) 由(1),(2)消去t得2'151'')1(yyx (3)

(3) 令',121yyyy,将方程(3)化成一阶微分方程组xyyyy1151''21221 初始条件为0)0(',0)0(yy 【2】模型程序 Matlab程序如下: (1) 建立m文件eq1.m function dy=eq1(x,y) dy=zeros(2,1); dy(1)=y(2); dy(2)=1/5*sqrt(1+y(1)^2)/(1-x); (2) 建立主程序 x0=0,xf=0.9999 [x,y]=ode15s('eq1',[x0,xf],[0,0]); plot(x,y(:,1),'b.') hold on y=0:0.01:2; plot(1,y,'b+') 【3】程序结果 得到图像如图所示 【4】结果分析: 由图像知,道到大概在(1,0.2)处击中乙舰。

4.两船欲停靠同一个码头, 设两船到达码头的时间各不相干,而且到达码头的时间在一昼夜内是等可能的.如果两船到达码头后需在码头停留的时间分别是1 小时与2 小 时,试求在一昼夜内,任一船到达时,需要等待空出码头的概率. 解答: 【1】 模型分析 设x,y分别为甲,乙两船到达时刻(小时),需等待空出码头的条件是





.24,24,2,1yxxyyx

【2】模型程序 Matlab程序如下 (1)建立m文件liti4.m function proguji=liti4(mm) frq=0; randnum1=unifrnd(0,24,mm,1); randnum2=unifrnd(0,24,mm,1); randnum=randnum1-randnum2; proguji=0; for ii=1:mm if randnum(ii,1)<=1&randnum(ii,1)>=-2 frq=frq+1 end end proguji=frq/mm (2)再执行程序 liti4(10000) 【3】运行结果 p=0.1995 【4】结果分析: 由运行结果得到需要等待空出码头的概率为0.2左右