全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
4611 5
2013-02-19
我的做法是先取1000个均值为20的泊松分布随机数,然后把它们标准化,他们就近似服从标准正太分布了,然后用正太分布概率密度函数,把1000个点带进去,并把1000个概率求和,等式右边为一,从而解出圆周率

但是我解出来的圆周率是4.942628e-09这种数量级的,明显不对啊,我的思路有问题么?



-------------------------------------------------- 无耻的分割线 --------------------------------------------------------------------

我好像做出来了,画个正方形,中间画个圆和四边相切,然后投点,数圆中的点和正方形中的点的个数,比值就是pi/4。
好像就是这么回事。。。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-2-19 22:10:00
这种方法跟泊松分布没什么关系吧。。。。虽然我也没想到怎么用泊松分布来模拟。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-20 09:50:15
思想方法是正确的。使用均匀分布做。我写了代码,解决你的问题。
> x=runif(n)
> n=1000000
> x=runif(n)
> y=runif(n)
> new=cbind(x,y)
> new=as.data.frame(new)
> new$c=sqrt(1-new$x^2)
> new$d=0
> new[new$y<=new$c,"d"]=1
> mpi=sum(new$d)/n*4
> round(mpi,2)
[1] 3.14
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-20 11:22:43
x<-rpois(1000,10)/10-1;xm<-mean(x)
my.pi<-1/2/dnorm(xm)^2;my.pi
3.142253

不知道这样算不算循环引用?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-20 12:33:39
x<-rpois(1000,10)/10-1;xm<-mean(x)
my.pi<-1/2/dnorm(xm)^2;my.pi
3.142253
你用到了dnorm(),实际上是绕了一个圈,把dnorm()中的pi 套出来,那还不如直接一点:
> x=rnorm(1)
> x
[1] -1.218260
> y=dnorm(x)
> y
[1] 0.1899457
> 0.5*(exp(-x^2/2)/y)^2
[1] 3.141593

这里精度不高的一个原因在于你用泊松分布拟合正态分布,然后再去求正态密度中的pi,产生误差。不过从教学的角度讲,可能老师也想让同学温习一下几个分布之间的关系。但如果这样的话,也可以从均匀分布变换到标准正态分布,如:
for(i in 1:10000){
+ a=sum(runif(12))-6}
可以从各种相关的分布于正态分布建立联系。
因此,请楼主把老师布置的要求仔细说明一下,否则总有些偏差。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-20 12:46:54
x<-rpois(1000,10)/10-1;xm<-mean(x)
my.pi<-1/2/dnorm(xm)^2;my.pi
3.142253
就这个问题再说明详细一点,由于正态分布中心对称,取均值的时候实际接近于0了,即这里mean(x)近似于0。由于exp(0)=1,此时的dnorm(0)=1/sqrt(2*pi),也就是说pi=1/2/dnorm(0)^2,如下代码:

> dnorm(0)
[1] 0.3989423
> 1/2/dnorm(0)^2
[1] 3.141593


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群