§8-4海港系统卸载货物的模拟 84.1关于原问题的模拟 读书P19-P122之“流程框图” 关于下面主程序(syp123)的说明: g是100个数,服从“15到145的均匀分布”,代表100个 船到来的间隔时间; G是100个数,代表100个船的到来时刻 f是100个数,服从“45到90的均匀分布”,代表100个 船的卸载时间; 是100个数,代表100个船的离开时刻 g=15+130*rand(1,100) G(1)=g(1) fori=2:100 G(=G(-l)+g(, f=45+45*rand(1,100); F(1)=g(1)+f(1) fori=2:100 F(=max(F(i-1)G()+f(); d ZXZSJ=sum(f); ZKXSJ=F(100)-ZXZSJ KXL=ZKXSJ/F(100) dd(1)0tl()=d(1)+f(1) dd()=max(F(-)G(0), tl(Fdd(o+f(o n(dd),pjtl-mean(tl) zedd=max(dd), zctl-=max(tl) 由于随机因素,每次运行,机器会产生不同的随 机数,故计算结果也会不同。下表给出了十次计算得 到的结果 次平均停留最长停留「平均等待|最长等待空闲率 112 275 189 0.16 4134 0.1l 123 218 0.13 202 21 146 0.2 93 127 0.19 0.13 书P124之“想(1)”时间间隔改为“10到90的均 匀分布”,则结果如下: 次平均停留最长停留「平均等待|最长等待空闲 781 1389 713 1323 0.0180 752 1358 1307 0.0053
§8—4 海港系统卸载货物的模拟 8.4.1 关于原问题的模拟 读书 P119-----P122 之“流程框图” 关于下面主程序(syp123)的说明: g 是 100 个数,服从“15 到 145 的均匀分布”,代表 100 个 船到来的间隔时间; G 是 100 个数,代表 100 个船的到来时刻; f 是 100 个数,服从“45 到 90 的均匀分布”,代表 100 个 船的卸载时间; F 是 100 个数,代表 100 个船的离开时刻 clear g=15+130*rand(1,100); G(1)=g(1); for i=2:100 G(i)=G(i-1)+g(i); end f=45+45*rand(1,100); F(1)=g(1)+f(1); for i=2:100 F(i)=max(F(i-1),G(i))+f(i); end ZXZSJ=sum(f);ZKXSJ=F(100)-ZXZSJ; KXL=ZKXSJ/F(100) dd(1)=0;tl(1)=dd(1)+f(1); for i=2:100 dd(i)=max(F(i-1)-G(i),0); tl(i)=dd(i)+f(i); end pjdd=mean(dd),pjtl=mean(tl) zcdd=max(dd),zctl=max(tl) 由于随机因素,每次运行,机器会产生不同的随 机数,故计算结果也会不同。下表给出了十次计算得 到的结果: 次 平均停留 最长停留 平均等待 最长等待 空闲率 1 101 322 36 267 0.22 2 88 200 20 146 0.20 3 112 275 44 189 0.16 4 134 296 65 246 0.11 5 123 269 56 181 0.16 6 117 271 50 218 0.13 7 88 202 21 146 0.22 8 92 193 25 127 0.19 9 103 256 37 189 0.15 10 106 291 37 223 0.13 书 P124 之“想(1)”:时间间隔改为“10 到 90 的均 匀分布”,则结果如下: 次 平均停留 最长停留 平均等待 最长等待 空闲率 1 781 1389 713 1323 0.0180 2 752 1358 686 1307 0.0053
822 1524 753 1448|0.0079 8.4.2根据统计数据确定间隔时间、卸载时间 看书P124之“表89”,如何根据统计规律来产生 间隔时间、卸栽时间随机数呢? 法一:书P125-P127之方法。 法二:命令g=mand(1,100)产生0到1的100个均 匀数,逐个检验每个g(i),若它介于0--0.009则令 g(i)=20就是第i个间隔时间,若它介于0009-0038 则令g(i)=30就是第ⅰ个间隔时间,若它介于 0.038-0073则令g(}=40就是第ⅰ个间隔时间,等等。 以同样方法产生卸载时间。 下面两个函数文件就是用“法二”的方法,根据 表89”的数据,产生100个船的到来间隔g、卸载 时间f function g=syp125hswjl g=rand(1,100) fori=1:100 ifg(i)<0.0009 g()=20 elseif g(i<0.038 g()=30 elseif g(i<0.073 g()=40 elseif g(i<0. 124 g()=50 elseif g(<0. 214 g() elseif g(i)<0.375 g(1)=70 elseif g(<0.575 g()=80 elseif g(i<0.747 g(1)= elseif g(i)<0.872 g()=100 elseif g(<0.943 g()=110 elseif g(<0.980 g()=120 elseif g(i)×0.997 g(1)=130; else g()= end function f=syp125hswj2 f=rand(1,100) fori=1:100 if()<0.017 f(i)=47;
3 822 1524 753 1448 0.0079 8.4.2 根据统计数据确定间隔时间、卸载时间 看书 P124 之“表 8.9”,如何根据统计规律来产生 间隔时间、卸栽时间随机数呢? 法一:书 P125----P127 之方法。 法二:命令 g=rand(1,100)产生 0 到 1 的 100 个均 匀数,逐个检验每个 g(i),若它介于 0---0.009 则令 g(i)=20 就是第 i 个间隔时间,若它介于 0.009---0.038 则令 g(i)=30 就是第 i 个间隔时间,若它介于 0.038---0.073 则令 g(i)=40 就是第 i 个间隔时间,等等。 以同样方法产生卸载时间。 下面两个函数文件就是用“法二”的方法,根据 “表 8.9”的数据,产生 100 个船的到来间隔 g、卸载 时间 f : function g=syp125hswj1 g=rand(1,100); for i=1:100 if g(i)<0.0009 g(i)=20; elseif g(i)<0.038 g(i)=30; elseif g(i)<0.073 g(i)=40; elseif g(i)<0.124 g(i)=50; elseif g(i)<0.214 g(i)=60; elseif g(i)<0.375 g(i)=70; elseif g(i)<0.575 g(i)=80; elseif g(i)<0.747 g(i)=90; elseif g(i)<0.872 g(i)=100; elseif g(i)<0.943 g(i)=110; elseif g(i)<0.980 g(i)=120; elseif g(i)<0.997 g(i)=130; else g(i)=140; end end 第二个: function f=syp125hswj2 f=rand(1,100); for i=1:100 if f(i)<0.017 f(i)=47;
seif f(i<0. 062 elseif f(i)×0.157 elseif f(i)×0.243 f(i)=62; elseif f(i)×0.373 f()=67 elseif f(<0.558 f(i)= iff(i)<0.7 f(i)=77; f(i)<0.909 else g()=87 d d 再将主程序(sypl23)中的两句修改 g=15+130*rand(1,100),改为g=syp125 howl f=45+45*rand(1,100)改为f=syp12hsw2; 执行结果 次平均停留|最长停留平均等待|最长等待空闲率 147 70 0.26 81 18 0.23 0.21 119 0.23 12 0.18 §8-5连续系统的计算机模拟 当系统的状态是随时间连续变化时,就称为连 续系统。如处在飞行中的导弹,其位置坐标就是连续 变化的。对连续系统的计算机模拟,就是近似地获取 在一些离散的时刻点上的数值,利用这些数值模拟系 统的运行过程 例:t=0时刻,在导弹基地正北120km处,敌舰向东 行驶速度90km/h,同时导弹发出,速度450kmh。飞 行中,任意时刻导弹的方向总是指向目标 (1)若敌舰不变速、不变向,何时何地击中? (2)从0时刻起,敌舰发现导弹,任意时刻速度大 小为135,方向总与导弹垂直,何时何地击中? 解:(1)任意t时刻导弹位置(xy),则模型为 dx 90t-x 450 dt 0 变形为
elseif f(i)<0.062 f(i)=52; elseif f(i)<0.157 f(i)=57; elseif f(i)<0.243 f(i)=62; elseif f(i)<0.373 f(i)=67; elseif f(i)<0.558 f(i)=72; elseif f(i)<0.766 f(i)=77; elseif f(i)<0.909 f(i)=82; else g(i)=87; end end 再将主程序(syp123)中的两句修改: g=15+130*rand(1,100); 改为 g=syp125hswj1; f=45+45*rand(1,100); 改为 f=syp125hswj2; 执行结果: 次 平均停留 最长停留 平均等待 最长等待 空闲率 1 68 147 7 70 0.26 2 81 194 18 120 0.23 3 81 210 17 157 0.22 4 72 133 6 61 0.21 5 71 119 7 49 0.23 6 83 182 17 112 0.18 §8—5 连续系统的计算机模拟 当 系统的状态 是随时间连续变化时,就称为连 续系统。如处在飞行中的导弹,其位置坐标就是连续 变化的。对连续系统的计算机模拟,就是近似地获取 在一些离散的时刻点上的数值,利用这些数值模拟系 统的运行过程。 例:t=0 时刻,在导弹基地正北 120km 处,敌舰向东 行驶速度 90km/h,同时导弹发出,速度 450 km/h。飞 行中,任意时刻导弹的方向总是指向目标。 (1)若敌舰不变速、不变向,何时何地击中? (2)从 0 时刻起,敌舰发现导弹,任意时刻速度大 小为 135,方向总与导弹垂直,何时何地击中? 解:(1)任意 t 时刻导弹位置(x,y),则模型为 = = = + − − = = = | 0, | 0. 450, ( ) ( ) , 90 120 0 0 2 2 t t x y dt dx dy t x y dx dy 变形为:
dx 450.90t 450·120 dt√90-x)2+(120-y)2dt√(90n-x)2+(120-y)2 以小步长τ将时间离散化,时间每前进一步,就 按照“前进尤拉方法”计算xy,当20-y≈0时就 认为击中。得计算公式: x1=0,y1=0,k=1,2,3 000025, +T 90kr-x4)2+( 450·120 Vk=V+T (90kr-x)2+(120-y) 程序(sp13la) x=Oy=0t=0.00025; fork=1:10000 120- X=x+450*t*abs(p)w,y=y+450*t*abs(q)/ if abs((120-y)=0.01 k, jzsjk*t,jZwz=X 结果:k=l11js=0.2778jzz=249963 图形演示: x=Oy=0t=0.00025; hold on plot(0,OJ.150J)plot(40.40]0.150]) plot([O,40][0,0)plot(0,40]150,150grid fork=1:10000 p=90*k*t-x q=120-y; w=sqrt(p 2+q2); X-X+450 t*abs(p)w, y=y+450*t*abs(q plot(x, y, . ), plot(90*kt, 120, .) if abs((120-y)=0.01 break end k, jzsk*t, jZwzX hold off
2 2 2 2 (90 ) (120 ) 450 120 , (90 ) (120 ) 450 90 t x y y dt dy t x y t x dt dx − + − − = − + − − = 以小步长 将时间离散化,时间每前进一步,就 按照“前进尤拉方法”计算 x, y ,当 120 − y 0 时就 认为击中。得计算公式: . (90 ) (120 ) 450 120 , (90 ) (120 ) 450 90 0, 0, 1,2,3,......, 0.00025, 2 2 1 2 2 1 1 1 k k k k k k k k k k k x y y y y k x y k x x x x y k − + − − = + − + − − = + = = = = + + 程序(syp131a) clear x=0;y=0;t=0.00025; for k=1:10000 p=90*k*t-x;q=120-y;w=sqrt(p^2+q^2); x=x+450*t*abs(p)/w;y=y+450*t*abs(q)/w; if abs(120-y)<=0.01 break end end k,jzsj=k*t,jzwz=x 结果: k =1111 jzsj =0.2778 jzwz =24.9963 图形演示: clear x=0;y=0;t=0.00025; hold on plot([0,0],[0.150]),plot([40,40],[0.150]) plot([0,40],[0,0]),plot([0,40],[150,150]),grid for k=1:10000 p=90*k*t-x;q=120-y;w=sqrt(p^2+q^2); x=x+450*t*abs(p)/w;y=y+450*t*abs(q)/w; plot(x,y,'.'),plot(90*k*t,120,'.') if abs(120-y)<=0.01 break end end k,jzsj=k*t,jzwz=x hold off
下面几个图,分别显示时间为0.075,0.15,02 025(小时)时,导弹及敌舰的位置 t=0075(小时) 152025 t=0.15(小时)时 t=0.2(小时)时
下面几个图,分别显示时间为 0.075, 0.15, 0.2, 0.25(小时)时,导弹及敌舰的位置: t=0.075(小时)时 t=0.15(小时)时 t=0.2(小时)时