数学建模与数学实验计算机模拟实验目的实验内容学习计算机模拟的基本过程与方法.
1,模拟的概念.
4,实验作业.
3.计算机模拟实例.
2.产生随机数的计算机命令.
连续系统模拟实例,追逐问题离散系统模拟实例,排队问题用蒙特卡罗法解非线性规划问题返回计算机模拟实例模拟的概念模拟 就是利用物理的、数学的模型来类比、模仿现实系统及其演变过程,以寻求过程规律的一种方法.
模拟的基本思想 是建立一个试验的模型,这个模型包含所研究系统的主要特点.通过对这个实验模型的运行,
获得所要研究系统的必要信息,
模拟的方法
1.物理模拟:
对实际系统及其过程用功能相似的实物系统去模仿.
例如,军事演习、船艇实验、沙盘作业等.
物理模拟通常花费较大、周期较长,且在物理模型上改变系统结构和系数都较困难.而且,许多系统无法进行物理模拟,如社会经济系统、生态系统等.
在实际问题中,面对一些带随机因素的复杂系统,
用分析方法建模常常需要作许多简化假设,与面临的实际问题可能相差甚远,以致解答根本无法应用,这时,
计算机模拟几乎成为唯一的选择.
在一定的假设条件下,运用数学运算模拟系统的运行,称为数学模拟.现代的数学模拟都是在计算机上进行的,称为计算机模拟.
2.数学模拟计算机模拟可以反复进行,改变系统的结构和系数都比较容易.
蒙特卡罗( Monte Carlo)方法 是一种应用随机数来进行计算机模拟的方法.此方法对研究的系统进行随机观察抽样,通过对样本值的观察统计,求得所研究系统的某些参数.
例 1 在我方某前沿防守地域,敌人以一个炮排(含两门火炮)为单位对我方进行干扰和破坏.为躲避我方打击,敌方对其阵地进行了伪装并经常变换射击地点,
经过长期观察发现,我方指挥所对敌方目标的指示有 50%是准确的,而我方火力单位,在指示正确时,有 1/3的射击效果能毁伤敌人一门火炮,有 1/6
的射击效果能全部消灭敌人.
现在希望能用某种方式把我方将要对敌人实施的 20次打击结果显现出来,确定有效射击的比率及毁伤敌方火炮的平均值.
分析,这是一个概率问题,可以通过理论计算得到相应的概率和期望值,但这样只能给出作战行动的最终静态结果,而显示不出作战行动的动态过程,
为了能显示我方 20次射击的过程,现采用模拟的方式.
需要模拟出以下两件事:
1,问题分析
[2] 当指示正确时,我方火力单位的射击结果情况
[1] 观察所对目标的指示正确与否模拟试验有两种结果,每种结果出现的概率都是 1/2.
因此,可用投掷 1枚硬币的方式予以确定,当硬币出现正面时为指示正确,反之为不正确.
模拟试验有三种结果:毁伤 1门火炮的可能性为 1/3(即 2/6),毁伤两门的可能性为 1/6,没能毁伤敌火炮的可能性为 1/2(即 3/6).
这时 可用投掷骰子的方法来确定,
如果出现的是1、2、3点:则认为没能击中敌人;
如果出现的是4、5点:则认为毁伤敌人一门火炮;
若出现的是6点:则认为毁伤敌人两门火炮.
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= E1= 0× +1 × +2 ×
停止硬币正面?Y N
N
Y
1,2,3
4,5 6
120k 220k 320k23()20kk?
4,模拟结果消灭敌人火炮数试验序号投硬币结 果指示正确指 示不正确掷骰子结 果
0 1 2
1 正 ∨ 4 ∨
2 正 ∨ 4 ∨
3 反 ∨ ∨
4 正 ∨ 1 ∨
5 正 ∨ 2 ∨
6 反 ∨ ∨
7 正 ∨ 3 ∨
8 正 ∨ 6 ∨
9 反 ∨ ∨
10 反 ∨ ∨
消灭敌人火炮数试验序号投硬币结 果指示正确指 示不正确掷骰子结 果
0 1 2
11 正 ∨ 2 ∨
12 反 ∨ ∨
13 正 ∨ 3 ∨
14 反 ∨ ∨
15 正 ∨ 6 ∨
16 正 ∨ 4 ∨
17 正 ∨ 2 ∨
18 正 ∨ 4 ∨
19 反 ∨ ∨
20 正 ∨ 6 ∨
从以上模拟结果可计算出,E = 7 /20 =0,35
20 3220 41201301E
=0,5
5,理论计算设:
0
1
j

观 察 所 对 目 标 指 示 不 正 确观 察 所 对 目 标 指 示 正 确
A 0,射中敌方火炮的事件; A 1,射中敌方 1 门火炮的事件;
A 2,射中敌方两门火炮的事件,
则由全概率公式,
E = P ( A 0 ) = P ( j = 0 ) P ( A 0 ∣ j =0) + P ( j = 1) P ( A 0 ∣ j =1 )
=
25.0
2
1
2
1
0
2
1

P ( A 1 ) = P ( j =0 ) P( A 1 ∣ j =0) + P ( j =1) P ( A 1 ∣ j =1)
=
6
1
3
1
2
1
0
2
1

P ( A 2 ) = P ( j =0 ) P ( A 2 ∣ j = 0) + P ( j =1) P ( A 2 ∣ j =1)
=
12
1
6
1
2
1
0
2
1

E 1 =
33.0
12
1
2
6
1
1
6,结果比较理论计算和模拟结果的比较分类项目 无效射击 有效射击 平均值模 拟 0.65 0.35 0.5
理 论 0.75 0.25 0.33
返回虽然模拟结果与理论计算不完全一致,但它却能更加真实地表达实际战斗动态过程,
用蒙特卡罗方法进行计算机模拟的步骤,
[1] 设计一个逻辑框图,即模拟模型.这个框图要正确反映系统各部分运行时的逻辑关系.
[2] 模拟随机现象.可通过具有各种概率分布的模拟随机数来模拟随机现象.
产生模拟随机数的计算机命令在 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 阶均值为?,方差为? 的 正态分布 的随机数矩阵,
nor mr nd (?,?,m,n )
产生一个均值为?,方差为? 的正态分布的随机数,
normrnd (?,? )
To MATLAB( rnd)
当研究对象视为大量相互独立的随机变量之和,且其中每一种变量对总和的影响都很小时,可以认为该对象服从正态分布.
机械加工得到的零件尺寸的偏差、射击命中点与目标的偏差、
各种测量误差、人的身高、体重等,都可近似看成服从正态分布.
4,产生 m? n 阶 期望值 为? 的 指数分布 的随机数矩阵,e xp r nd (?,m,n )
若连续型随机变量 X的概率密度函数为其中 >0为常数,则称 X服从 参数 为 的 指数分布,
e0()
00
t x
fx x



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


5,产生 m? n 阶参数为? 的 泊松分布 的随机数矩阵,
pois srnd (?,m,n)
泊松分布在排队系统、产品检验、天文、物理等领域有广泛应用.
泊松分布的期望值为?
如相继两个事件出现的间隔时间服从参数为 的指数分布,
则在单位时间间隔内事件出现的次数服从参数为 的泊松分布.即单位时间内该事件出现 k次的概率为:
e( ),0,1,2,,
!
kP X k k
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的 4个顶点各有 1人,在某一时刻,4人同时出发以匀速 v=1m/s
按顺时针方向追逐下一人,如果他们始终保持对准目标,则最终按螺旋状曲线于中心点 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 1c o s?
d
yy ii 1si 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]模拟 1日
To MATLAB(simu1)
[2]模拟 100日
To MATLAB(simu2)
返回用蒙特卡罗法解非线性规划问题对于 非线性规划问题,
min f ( X ) X R n?
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,试验点总数; M AX P,最大试验点总数;
K,可行点总数; M A XK,最大可行点数 ;
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
例 m ax
21212221 382 xxxxxxz
s,t 103
21 xx
0
1?x
0
2?x
在 MATLAB软件包中编程,共需 3个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); %转化为求最小值问题
% lpconst.m
fu n ct io n lp c= lp co ns t( x ) % 约束条件
if 3* x( 1) +x (2 ) - 10 <= 0,5 & 3 *x (1 )+ x( 2) - 1 0> = - 0,5 % 约束条件的误差为
5.0?
l pc =1 ;
el s e
l pc =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.0 3 元的价格买进报纸,以 0.05 元的价格出售,根据长期统计,报纸每天的销售量及百分率为销售量 200 210 220 230 240 250
百分率 0.10 0.20 0.40 0.15 0.10 0.05
已知当天销售不出去的报纸,将以每份 0,02 元的价格退还报社,试用模拟方法确定报童每天买进多少份报纸,能使平均总收入最大?
1.编一个福利彩票电脑选号的程序.
4,某设备上安装有 4只型号规格完全相同的电子管,已知电子管寿命服从 1000~ 2000h之间的均匀分布.电子管损坏时有两种维修方案,一是每次更换损坏的那只;二是当其中 1
只损坏时 4只同时更换.已知更换时间为换 1只时需 1h,4只同时换为 2h.更换时机器因停止运转每小时的损失为 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= E1= 0× +1 × +2 ×
停止硬币正面?Y N
N
Y
1,2,3
4,5 6
120k 220k 320k23()20kk?
投掷硬币的计算机模拟
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= E1= 0× +1 × +2 ×
停止
R1<=0.5Y N
N
Y
R2<3/6
其它 R2>5/6
To MATLAB(liti1)
120k 220k 320k23()20kk?