问题
问题一列火车从A站开往B站,某人每天赶往B站赶火车.他己了解到火车从A站到B站的运行时间是服从均值为30分钟.标准差为2分钟的 正态分布.火车大约13点离开A站.此人大约13:30到达B站.火车离开A站 的时刻及概率和此人到达B站的时刻及率如表所示.用模拟实验的方法 求他赶上火车的概率.
直接R模拟(大数定律)
train<-function(n){
m=0
for(i in 1:n){
x<-rnorm(1,30,2)
p1=c(0.7,0.2,0.1);p2=c(0.3,0.4,0.2,0.1)
y<-sample(c(0,5,10),1,p=p1)
z<-sample(c(28,30,32,34),1,p=p2)
if((x+y)>z){m=m+1}
}
rt<-c('赶上概率'=m/n);rt
}
train(10000)
其中函数说明
rnorm
正态分布随机数的生成函数,句法是:rnorm(n,mean=0,sd=1) 其中n表示生成的随机数数量,mean是正态分布的均值,默认为0,sd是正态分布的标准差,默认时为1;
例
> rnorm(5)
[1] -0.49565105 1.88416170 -0.57505071 0.02450717 -0.05061391
> rnorm(5,10,1)
[1] 9.659984 11.131650 10.367761 7.634073 10.291419
更多关于分布函数详见
sample
sample的完整形式sample(x,size,replace,prob)
x是原样本;
size表示生成分布数据数目;
replace是重复的意思,即可以重复对元素进行抽样,如果为T也就是所谓的有放回抽样;默认为不放回
prob表示样本的分布率;默认为等概率
具体用法详见
例
> sample(c(1,2),2)
[1] 2 1
> sample(c(1,2),2)
[1] 1 2
> sample(c(1,2),2,T)
[1] 2 2
> sample(c(1,2),5,T,c(0.8,0.2))
[1] 1 1 1 1 1
> sample(c(1,2),5,T,c(0.8,0.2))
[1] 1 2 1 2 1
运行结果
> train<-function(n){
+ m=0
+ for(i in 1:n){
+ x<-rnorm(1,30,2)
+ p1=c(0.7,0.2,0.1);p2=c(0.3,0.4,0.2,0.1)
+ y<-sample(c(0,5,10),1,p=p1)
+ z<-sample(c(28,30,32,34),1,p=p2)
+ if((x+y)>z){m=m+1}
+ }
+ rt<-c('赶上概率'=m/n);rt
+ }
> train(10000)
赶上概率
0.6433