欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R语言-蒲丰投针问题(向量化)

程序员文章站 2022-04-16 19:35:21
...

蒲丰投针问题的具体过程及推导可参考百科,此处不再赘述,这里仅给出模拟步骤和实现代码。

蒲丰投针试验的模拟步骤

  • 设定试验总次数 NN,成功次数m=0m = 0,针的长度为hh,平行线间的距离为aa (hah\leqslant a)
  • 产生随机数XU(0,a/2)X\sim U\left(0,a/2\right)θU(0,π)\theta\sim U\left(0,\pi\right)
  • Xh2sinθX\leqslant \frac{h}{2}sin\thetam=m+1m=m+1,转上一步
  • 若达到试验总次数N,停止实验,计算π\pi的估计值π^=2hNam\widehat{\pi }=\frac{2hN}{am}

代码实现

  • 常规思想
buffon<-function(N,a,h){
  m = 0
  for (i in 1:N){
    x<-runif(1,0,a/2)
    theta<-runif(1,0,pi) %X和theta的产生
    if(x<=h/2*sin(theta)){ %判断条件
      m=m+1
    }
  }
  pin<-2*h*N/(a*m) %pi的估计值
  result<-c('pi估计值'=pin)
  return(result)
}

buffon(10000,2,0.8) %调用
  • 向量化思想
buffon<-function(N,a,h){
  m = 0
  if(h<=a){
    x<-runif(N,0,a/2)
    theta<-runif(N,0,pi) %直接产生N个x和theta
    m = sum(x<=h/2*sin(theta)) %满足判别条件时值为1,并求和
    pin<-2*h*N/(a*m)
  }else{
    stop("Error") %h小于等于a的判别
  }
  return(pin)
}

buffon(10000,2,0.8)

避免显示循环,遵循向量化原则,才能高效的使用R语言。

相关标签: R语言 r语言