计算机模拟实验目的实验内容学习计算机模拟的基本过程与方法。
1、模拟的概念。
4、实验作业 。
3、计算机模拟实例。
2、产生随机数的计算机命令。
连续系统模拟实例,追逐问题离散系统模拟实例,排队问题用蒙特卡洛法解非线性规划问题返回计算机模拟实例
2,符号假设
i:要模拟的打击次数; k1:没击中敌人火炮的射击总数;
k2:击中敌人一门火炮的射击总数; k3:击中敌人两门火炮的射击总数.
E:有效射击比率; E1,20次射击平均每次毁伤敌人的火炮数.
3,模拟框图 初始化,i=0,k1=0,k2=0,k3=0
i=i+1
骰子 点数?
k1=k1+1 k2=k2+1 k3=k3+1 k1=k1+1
i< 20?
E=(k2+k3)/20 E1=0*k1/20+1*k2/20+2*k3/20
停止硬币正面?Y N
N
Y
1,2,3
4,5 6
产生模拟随机数的计算机命令在 Matlab软件中,可以直接产生满足各种分布的随机数,
命令如下:
2,产生 m?n阶 [ 0,1 ] 均匀分布的随机数矩阵,rand (m,n)
产生一个[0,1]均匀分布的随机数,rand
1,产生 m?n阶 [ a,b] 均匀分布 U( a,b) 的随机数矩阵:
unifrnd (a,b,m,n)
产生一个[ a,b]均匀分布的随机数,unifrnd (a,b)
当只知道一个随机变量取值在( a,b)内,但不知道
(也没理由假设)它在何处取值的概率大,在何处取值的概率小,就只好用 U( a,b)来模拟它。
例 1的计算机模拟
3,产生 m? n 阶均值为?,方差为? 的 正态分布 的随机数矩阵:
n o r m r n d (?,?,m,n)
产生一个均值为?,方差为? 的正态分布的随机数,n o r m r n d (?,? )
To Matlab
( rnd)
当研究对象视为大量相互独立的随机变量之和,且其中每一种变量对总和的影响都很小时,可以认为该对象服从正态分布。
机械加工得到的零件尺寸的偏差、射击命中点与目标的偏差、
各种测量误差、人的身高、体重等,都可近似看成服从正态分布。
4,产生 m? n 阶 期望值 为? 的 指数分布 的随机数矩阵,e x p r n d (?,m,n )
若连续型随机变量 X的概率密度函数为其中 >0为常数,则称 X服从 参数 为 的 指数分布 。

00
0)(
x
xexf t

指数分布的期望值为
1
排队服务系统中顾客到达率为常数时的到达间隔、故障率为常数时零件的寿命都服从指数分布。
指数分布在排队论、可靠性分析中有广泛应用。
注意,Matlab中,产生 参数 为 的指数分布的命令为
exprnd( )
1
例 顾客到达某商店的间隔时间服从参数为 0.1的指数分布指数分布的均值为 1/0.1=10。
指两个顾客到达商店的平均间隔时间是 10个单位时间,即平均 10
个单位时间到达 1个顾客,顾客到达的间隔时间可用 exprnd(10)模拟。
设离散型随机变量 X的所有可能取值为 0,1,2,…,且取各个值的概率为其中 >0为常数,则称 X服从参数为 的 帕松分布 。
,,2,1,0,!)( kkekXP k

5,产生 m? n 阶参数为? 的 帕松分布 的随机数矩阵,p o i s s r n d (?,m,n)
帕松分布在排队系统、产品检验、天文、物理等领域有广泛应用。
帕松分布的期望值为?
如相继两个事件出现的间隔时间服从参数为 的指数分布,
则在单位时间间隔内事件出现的次数服从参数为 的泊松分布.即单位时间内该事件出现 k次的概率为:
,,2,1,0,!)( kkekXP k
反之亦然。
指数分布与帕松分布的关系:
(1)指两个顾客到达商店的平均间隔时间是 10个单位时间,即平均
10个单位时间到达 1个顾客,
(2)指一个单位时间内平均到达 0.1个顾客例 (1)顾客到达某商店的间隔时间服从参数为 0.1的指数分布
(2)该商店在单位时间内到达的顾客数服从参数为 0.1的帕松分布
返回例 2 敌坦克分队对我方阵地实施突袭,其到达规律服从泊松分布,平均每分钟到达4辆,( 1) 模拟敌坦克在3
分钟内到达目标区的数量,以及在第1,2,3分钟内各到达几辆坦克,( 2) 模拟在 3分钟内每辆敌坦克的到达时刻 。
( 1)用 poissrnd(4)进行模拟。 To Matlab( poiss)
( 2)坦克到达的间隔时间应服从参数为 4的负指数分布,
用 exprnd( 1/4)模拟。
To Matlab( time)
连续系统模拟实例,追逐问题状态随时间连续变化的系统称为 连续系统 。对连续系统的计算机模拟只能是近似的,只要这种近似达到一定的精度,也就可以满足要求。
例 追逐问题,如图,正方形 ABCD的四个顶点各有一人,在某一时刻,四人同时出发以匀速
v=1米 /秒按顺时针方向追逐下一人,如果他们始终保持对准目标,则最终按螺旋状曲线于中心点
O.试求出这种情况下每个人的行进轨迹,
O
B
CD
A
1,建立平面直角坐标系,A(x1,y1),B(x2,y2),C(x3,y3),D(x4,y4).
2,取时间间隔为 Δ t,计算每一点在各个时刻的坐标,
设某点在 t 时刻的坐标为,),(
ii
yx
则在 tt 时刻的坐标为,)s i n,c o s( tvytvx
ii

其中
d
xx
ii
1
c o s?
d
yy
ii
1
s i n?
2
1
2
1
)()(
iiii
yyxxd

3,取足够小的?,d 时结束算法,
4,对每一个点,连接它在各时刻的位置,即得所求运动轨迹,
求解过程,
To Matlab(chase) 返回
v=1;
dt=0.05;
x=[0 0 10 10];
y=[0 10 10 0];
for i=1:4
plot(x(i),y(i),'.'),hold on
end
d=20;
while(d>0.1)
x(5)=x(1);y(5)=y(1);
for i=1:4
d=sqrt((x(i+1)-x(i))^2+(y(i+1)-y(i))^2);
x(i)=x(i)+v*dt*(x(i+1)-x(i))/d;
y(i)=y(i)+v*dt*(y(i+1)-y(i))/d;
plot(x(i),y(i),'.'),hold on
end
end
计算程序,
To Matlab(chase) 返回离散系统模拟实例,排队问题排队论 主要研究随机服务系统的工作过程。
在排队系统中,服务对象的到达时间和服务时间都是随机的。排队论通过对每个个别的随机服务现象的统计研究,找出反映这些随机现象平均特性的规律,从而为设计新的服务系统和改进现有服务系统的工作提供依据。
对于排队服务系统,顾客常常注意排队的人是否太多,等候的时间是否长,而服务员则关心他空闲的时间是否太短,于是人们常用排队的长度、等待的时间及服务利用率等指标来衡量系统的性能,
[1] 系统的假设:
( 1) 顾客源是无穷的;
( 2) 排队的长度没有限制;
( 3) 到达系统的顾客按先后顺序依次进入服务,即“先到先服务”。
单服务员的排队模型,在某商店有一个售货员,顾客陆续来到,
售货员逐个地接待顾客,当到来的顾客较多时,一部分顾客便须排队等待,被接待后的顾客便离开商店,设:
1,顾客到来间隔时间服从参数为 0.1的指数分布,
2,对顾客的服务时间服从 [ 4,15 ] 上的均匀分布,
3,排队按先到先服务规则,队长无限制,
假定一个工作日为 8小时,时间以分钟为单位 。
[1]模拟一个工作日内完成服务的个数及顾客平均等待时间 t.
[2]模拟 100个工作日,求出平均每日完成服务的个数及每日顾客的平均等待时间 。
[2] 符号说明
w:总等待时间; ci:第 i个顾客的到达时刻;
bi:第 i个顾客开始服务时刻; ei:第 i个顾客服务结束时刻.
xi,第 i-1个顾客与第 i个顾客之间到达的间隔时间
yi,对第 i个顾客的服务时间
c1
b1
c3 c4 c5c2
e1
b2
e2
b3
e3
b4
e4
b5
ci=ci-1+ xi
ei=bi+yi
bi=max(ci,ei-1)
t
[3] 模拟框图 初始化:令 i=1,ei-1=0,w=0
产生间隔时间随机数 xi~参数为 0.1的指数分布
ci=xi,bi=xi
产生服务时间随机数 yi~[4,15]的均匀分布
ei=bi+yi
累计等待时间,w=w+bi-ci
准备下一次服务,i=i+1
产生间隔时间随机数 xi~参数为 0.1的指数分布
ci=ci-1+ xi
确定开始服务时间,bi=max(ci,ei-1)
bi> 480?Y N
i=i-1,t=w/i 输出结果:完成服务个数,m=i
平均等待时间,t
停止
[1]模拟一日
To Matlab(simu1)
[2]模拟 100日
To Matlab(simu2)
返回用蒙特卡洛法解非线性规划问题对于 非线性规划问题,
min f(X ) X
nE?
s.t,0)(?Xg i i=1,2,?,m
jjj bxa j = 1,2,?,n
用蒙特卡洛法 求解的基本思想 是:在估计的区域
{(x 1,x 2,,?,x n ) | x j ],[ jj ba?,j=1,2,?,n}
内随机取若干实验点,然后从试验点中找出可行点,再从可行点中选择最小点.
基本假设 试验点的第 j个分量 xj服从 [aj,bj]内的均匀分布.
符号假设
P,试验点总数; MAXP,最大试验点总数;
K,可行点总数;  MAXK,最大可行点数 ;
X *,迭代产生的最优点;
Q,迭代产生的最小值 f(X * ),其初始值为计算机所能表示的最大数.
求解过程先产生一个随机数作为初始试验点,以后则将上一个试验点的第 j个分量随机产生,其它分量不变而产生一新的试验点.这样,每产生一个新试验点只需一个新的随机数分量.当 K>MAXK或 P>MAXP时停止迭代,
框 图初始化,给定 MAXK,MAXP;k=0,p=0,Q:大整数
xj=aj+R(bj-aj) j=1,2,…,n
j=0
j=j+1,p=p+1
P>MAXP?Y N
xj=aj+R(bj-aj)
gi(X)≥0?
i=1,2…n
Y N j<n?
f(X)≥Q?Y N
X*=X,Q=f(X)
k=k+1
k>MAXK?Y N
输出 X,Q,停止
Y
N
例 max 2121
2
2
2
1 382 xxxxxxz
s,t 103 21 xx
01?x
02?x
在 Matlab软件包中编程,共需三个M-文件,randlp.m,
mylp.m,lpconst.m.主程序为 randlp.m.
% mylp.m
function z=mylp(x) %目标函数
z=2*x(1)^2+x(2)^2-x(1)*x(2)-8*x(1)-3*x(2); %转化为求最小值问题
% lpco nst,m
function lp c=l pco ns t(x )   % 约束条件
if 3*x(1)+x (2)-10<= 0.5 & 3* x(1)+x(2 )-10>=-0,5 % 约束条件的误差为 5.0?
lpc=1;
else
lpc=0;
end
% randlp.m
function [sol,r1,r2]=randlp(a,b,n) %随机模拟解非线性规划
debug=1;
a=0; %试验点下界
b=10; %试验点上界
n=1000; %试验点个数
r1=unifrnd(a,b,n,1); %n?1阶的[ a,b]均匀分布随机数矩阵
r2=unifrnd(a,b,n,1);
sol=[r1(1) r2(1)];
z0=inf;
for i=1:n
x1=r1(i);
x2=r2(i);
lpc=lpconst([x1 x2]);
if lpc==1
z=mylp([x1 x2]);
if z<z0
z0=z;
sol=[x1 x2];
end
end
end
To Matlab(randlp)
返回实验作业
2,某报童以每份 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、编一个福利彩票电脑选号的程序。
4,某设备上安装有四只型号规格完全相同的电子管,已知电子管寿命为 1000--2000小时之间的均匀分布。当电子管损坏时有两种维修方案,一是每次更换损坏的那一只;二是当其中一只损坏时四只同时更换。已知更换时间为换一只时需
1小时,4只同时换为 2小时。更换时机器因停止运转每小时的损失为 20元,又每只电子管价格 10元,试用模拟方法决定哪一个方案经济合理?
5,导弹追踪问题,设位于坐标原点的甲舰向位于 x轴上点 A(1,0)
处的乙舰发射导弹,导弹头始终对准乙舰,如果乙舰以最大的速度
(是常数 )沿平行于 y轴的直线行驶,导弹的速度是 5,模拟导弹运行的轨迹,又乙舰行驶多远时,导弹将它击中?
初始化,i=0,k1=0,k2=0,k3=0
i=i+1
骰子 点数?
k1=k1+1 k2=k2+1 k3=k3+1 k1=k1+1
i< 20?
E=(k2+k3)/20 E1=0*k1/20+1*k2/20+2*k3/20
停止硬币正面?Y N
N
Y
1,2,3
4,5 6
投掷硬币的计算机模拟
1、产生服从 U( 0,1)的随机数 R1
2、将区间 [0,1]两等分:
若,则对应硬币正面若,则对应硬币反面
5.00 1 R
15.0 1 R
掷骰子的计算机模拟
1、产生服从 U( 0,1)的随机数 R2
2、将区间 [0,1]六等份:
若,则对应 骰子点数为 1
若,则对应 骰子点数为 2
若,则对应 骰子点数为 3
若,则对应 骰子点数为 4
若,则对应 骰子点数为 5
若,则对应 骰子点数为 6
6
10
2 R
6
2
6
1
2 R
6
3
6
2
2 R
6
5
6
4
2 R
6
4
6
3
2 R
165 2 R
初始化,i=0,k1=0,k2=0,k3=0
i=i+1
R2=?
k1=k1+1 k2=k2+1 k3=k3+1 k1=k1+1
i< 20?
E=(k2+k3)/20 E1=0*k1/20+1*k2/20+2*k3/20
停止
R1<=0.5Y N
N
Y
R2<3/6
其它 R2>5/6
To Matlab(liti1)