R学习之统计实验(五)--赶火车问题(R语言编程)-----数模

17 篇文章 11 订阅

问题

问题一列火车从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 

DONE!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值