問題
問題一列火車從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