【R实验】投针试验与pie的近似计算
平面上画着一些平行线,每两条之间的距离为a.在此平面上任意投一枚针,其长为L,试求这针与某一直线相交的概率。
本章讨论了Buffon投针实验的计算,以下用R模拟投针实验,重现Buffon投针。该实验在计算机上使用R来实现,需要以下两个步骤
(1) 产生随机数。产生n个相互独立的随机变量抽样序列
x<-runif(1,0,a/2)用于生成均匀分布的随机数,使得
alpha<-runif(1,0,1)*pi生成均匀分布的随机数,使得
(2) 模拟实验,检验不等式x <=L/2 * sinα, 设上面的实验有k次成功的,则可以得到pie的值。
先写出投针函数。试验次数记为n,直线间隔记为a,针的长度记为L,针与线相交次数记为k,针的中点M到最近的直线的距离记为x
> BuffonNeedle<-function(n,a,L){
+ k<-0
+ for (i in 1:n) {
+ x<-runif(1,0, a/2)
+ alpha<-runif(1,0,1)*pi
+ if(1/2*L*sin(alpha)>=x){k=k+1}
+ }
+ #估算概率
+ p<-k/n
+ #估算pi
+ pie<-(2*L)/(a*p)
+ result<-c('估计的概率'=p,'pi的估计值'=pie);result
+}
设置不同的参数观察计算得到的概率值,以及pie值。
>set.seed(3)
>BuffonNeedle(n=10000,a=4,L=2)
估计的概率 pi的估计值
0.320200 3.123048
>set.seed(3)
>BuffonNeedle(10000,1,0.8)
估计的概率 pi的估计值
0.511400 3.128666
>set.seed(3)
>BuffonNeedle(10000,2,1.5)
估计的概率 pi的估计值
0.480500 3.121748

