仿真是一种常见的解题方法,一般采用蒙特卡洛法进行仿真。(即使用随机数来解决计算问题)
常用来计算某概率不确定的事件发生的概率。比如对该事件测试1000次,发生了200次,那该事件发生的概率就是20%
以下题作为例子:
一列火车大约在下午1点离开A站,其规律如下:
离站时间 13:00 13:05 13:10
概率 0.7 0.2 0.1
火车从A站到B站所需时间服从正态分布,平均30分钟,标准差2分钟。如果你要赶的是这趟火车的下一站B,而你到达的时间分布为
时间 13:28 13:30 13:32 13:34
概率 0.3 0.4 0.2 0.1
问你能有多大机会赶上这列火车?
对于离站时间的概率,可以设一个r1服从U(0,1),当0
如果t1+30
下面是matlab代码:
clc
N=5000; %simulation number设定仿真次数
M=0; %initial number of taking the train 赶上火车的次数,初值置为0
for i=1:N
r1=rand;%产生一个0,1间的随机数
if r1<0.7
t1=0; % the train starts from station A at 13 认为火车13点从A出发
elseif r1<0.9 % equivalent to 等价于0.7
t1=5; % the train starts from station A at 13:05火车13:05出发
else % namely 即r>0.9
t1=10;% 火车13:10出发
end
t2=normrnd(30,2);%time needed from station 火车从A 到to B需要的时间
r2=rand;%又产生一个0,1间的随机数,不能用前一个,因为两个事件独立
if r2<0.3
t3=28; %the time you coming to station B at 13:28你13:28到B站
elseif r2<0.7
t3=30;%the time you coming to station B at 13:30你13:30到B站
elseif r2<0.9
t3=32;%the time you coming to station B at 13:32你13:32到B站
else
t3=34;%the time you coming to station B at 13:34你13:34到B站
end
if t3
M=M+1; %你乘上火车,次数加1
end
end
result=M/N % final frequency计算赶上火车的频率
网友评论