《数学建模实验》实验报告学号:实验十四:计算机模拟1.某报童以每份0.03元的价格买进报纸,以0.05元的价格出售.根据长期统计,报纸每天的销售量及百分率为销售量200210220230240250百分率0.100.200.400.150.100.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.mfunctionre=GetProfit(a,b)ifab%供不应求:报童购买量小于销售量re=a*(0.05-0.03);else%供过于求:报童购买量大于销售量re=b*(0.05-0.03)+(a-b)*(0.02-0.03);end(2)建立主程序main.mBUYMIN=200;%每天的最小购买量BUYMAX=250;%每天的最大购买量SIMUDAY=1.0e+5;%模拟时间sell_amount=200:10:250;%销售量percentage=[0.10.30.70.850.951];%百分率buy_amount=0;ave_profit=0;forloop_buy=BUYMIN:BUYMAXsum_profit=0;forloop_day=1:SIMUDAYindex=find(percentage=rand);%产生随机数,用于决定当天的销售量sum_profit=sum_profit+GetProfit(loop_buy,sell_amount(index(1)));endbuy_amount=[buy_amount,loop_buy];%循环嵌套ave_profit=[ave_profit,sum_profit/SIMUDAY];%循环嵌套endbuy_amount(1)=[];%第一个元素置空ave_profit(1)=[];[val,id]=max(ave_profit)%显示最大平均收入valbuy=buy_amount(id)%显示在平均收入最大情况下的每天的购买量buyxlabel='每天的购买量';ylabel='平均利润';plot(buy_amount,ave_profit,'*:');【4】运行结果:val=4.2801id=21buy=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)%坚持同样的时间哪个更经济whileimwhilex1n%全部换A=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;ifA2nia=ia+1;A2=A2+A;endifB2nib=ib+1;B2=B2+B;endifC2nic=ic+1;C2=C2+C;endifD2nid=id+1;D2=D2+D;endendy1;%输出n个小时后方法1所用的钱y2=(ia+ib+ic+ic)*20+(ia+ib+ic+ic)*10;%输出n个小时后方法2所用的钱ify1y2j=j+1;%统计第一种办法占优的次数endi=i+1;endmjpercent=j/m【3】运行结果:m=50j=50percent=1【4】结果分析由此可以看出实验了m=50次,第一种办法占优了j=50次,占优率100%改变m或n也可得到类似的结果所以全部更换这种办法更好3.导弹追踪问题:设位于坐标原点的甲舰向位于x轴上点A(1,0)处的乙舰发射导弹,导弹头始终对准乙舰.如果乙舰以最大的速度(是常数)沿平行于y轴的直线行驶,导弹的速度是5,模拟导弹运行的轨迹.又乙舰行驶多远时,导弹将它击中?解答:【1】模型建立假设导弹在t时刻的位置为))(),((tytxP,乙舰位于),1(0tvQ。由于导弹头始终对准乙舰,故此时直线PQ就是导弹的轨迹曲线弧OP在点P处时的切线.即有xytvy1'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.mfunctiondy=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.')holdony=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.mfunctionproguji=liti4(mm)frq=0;randnum1=unifrnd(0,24,mm,1);randnum2=unifrnd(0,24,mm,1);randnum=randnum1-randnum2;proguji=0;forii=1:mmifrandnum(ii,1)=1&randnum(ii,1)=-2frq=frq+1endendproguji=frq/mm(2)再执行程序liti4(10000)【3】运行结果p=0.1995【4】结果分析:由运行结果得到需要等待空出码头的概率为0.2左右