您的位置:首页 > 编程语言

R学习之统计实验(一)--电梯问题(R语言编程)-----数模

2018-07-29 16:37 375 查看

问题

有r个人在一楼进入电梯楼上共有n层设每个乘客在任何层楼出电梯的概率相同.试建立一个概率模型,求直到电梯中的人下完为止,电梯需停次数的数学期望并对r=10,n=7进行模拟验证

直接R模拟(大数定律)

注意括号各种英文输入,R语言编写时候看不出明显区别

elevator <- function(r,n,m){  #r个人,n为1楼以上楼层数,m为数据个数
y=0
for(i in 1:m){
u<-runif(r)    #默认考虑不出现0和1
x<-floor(u*n)+1
y[i]<-length(unique(x))
}
rt=mean(y);
rt
}

其中函数说明

runif
生成均匀分布的随机函数
句法是:runif(n,min,max) n表示生成的随机数数量,min表示均匀分布的下限,max表示均匀分布的上限;若省略参数min、max,则默认生成[0,1]上的均匀分布随机数。

> runif(5)  # 生成5个[0,1]的均匀分布的随机数
[1] 0.329008006 0.789094851 0.783691668 0.660506713 0.001850444
> runif(5,0,5)  # 生成5个[0,5]的均匀分布的随机数
[1] 1.7970188 3.8995100 1.0519334 2.5112307 0.2245155

tip:同样还有以二项、正态、指数等生成随机数的函数详见
floor
句法是:floor(x) 其功能是“向下取整”

> a<-c(0.12, 1.3332, 3.623, 4.999, 8.981)#c表示向量
> floor(a)
[1] 0 1 3 4 8

tip:同样还有向上取整,四舍五入详见
代码中runif和floor配合使用表示生成从1~n的r个随机数(放在x中)

u<-runif(r)    #默认考虑不出现0和1
x<-floor(u*n)+1

单独用如下

> a<-runif(5)
> floor(a*10)+1
[1] 7 5 6 5 7  #1~10 5个随机数
> a<-runif(5)
> floor(a*10)+1
[1] 4 2 2 3 1  #1~10 5个随机数

unique
unque用法很多,基本都是围绕去重详见

> unique(c(1,1,5,3,5,2,2,1))
[1] 1 5 3 2

length
数组长度,即行数和列数中的较大值,相当于max(size(a))

> length(c(1,3,4,2,5))
[1] 5

tip:相似还有求数组行列数和元素总数详见
mean
表示求数组得平均值详见

> mean(c(0,1,2,3,4,5))
[1] 2.5

结果

> elevator <- function(r,n,m){  #r个人,n为1楼以上楼层数,m为数据个数
+   y=0
+   for(i in 1:m){
+     u<-runif(r)
+     x<-floor(u*n)+1
+     y[i]<-length(unique(x))
+   }
+   rt=mean(y);
+   rt
+ }
> elevator(7,10,5000)
[1] 5.2412

DONE!!!

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: