找回密码
 注册
查看: 5588|回复: 1

如何蒙特卡洛随机模拟求圆周率

[复制链接]
发表于 2012-10-25 10:14:28 | 显示全部楼层 |阅读模式
利用随机模拟估计π的近似值
利用随机投点法实现
内接圆的面积是正方形面积的π/4。
随机生成在[0,1]区间内的30000个点
统计落入曲线(圆)内部的点数和外部的点数。
比率乘以4得到π的近似值
回复

使用道具 举报

发表于 2012-10-25 20:21:02 | 显示全部楼层
这个好整,将坐标轴放到圆心,然后第一象限的1/4圆形就行,产生两组0-1均匀随机数,这个相当于随机投到第一象限的正方形区域内的点数,然后对于所有的点对计算到(0.0)的距离sqrt(x^2+y^2)是否小于半径1,然后计算小于半径的数目,然后除以总数,乘以4,代码如下:
good_pi<-function(N){
x=runif(N,0,1)    #产生一组均匀随机数x范围0-1
y=runif(N,0,1)    #产生一组均匀随机数y范围0-1
d=sqrt(x^2+y^2)    #计算到原点的距离
M=length(subset(d,d<=1)) #判断产生的所有点中到原点的距离是否小于半径1
myPI=4*M/N
return(myPI)
}

good_pi(30000)

#为了产生稳定的估计值,可以多运行几次,然后求平均
duplicate<-sapply(1:1000,function(x){my_pi(30000)}) #测试1000次实验,每次投点30000个。
hist(duplicate)
mean(duplicate)


运行结果:
>good_pi(30000)
[1] 3.142533
> mean(duplicate)
[1] 3.14203
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-22 19:49 , Processed in 0.024498 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表