返回列表

单位圆内随机取两点距离小于1/2的概率模拟

问题是前几天在某群里看到的,后来我分段积分计算出结果是
\[\frac{-9 \sqrt{15}+16 \pi +48 \arccos(7/8)}{64 \pi }\approx 0.197282185 \]
昨晚突然想到用 Mathematica 模拟一下,想到了如下

i = 0;
j = 0;
n = 1000000;
Do[x1 = RandomReal[{-1, 1}];
  y1 = RandomReal[{-1, 1}];
  x2 = RandomReal[{-1, 1}];
  y2 = RandomReal[{-1, 1}];
  If[x1^2 + y1^2 < 1 && x2^2 + y2^2 < 1, {
    j++;
    If[(x1 - x2)^2 + (y1 - y2)^2 < 1/4, i++];
    }], {n}];
N[i/j, 10]


其中,n 的值越大即投点越多,越精确,当然程序运行也越久,这里我用了 1000000,运行了几次,得到几个结果
0.1974656502
0.1969572882
0.1967015821
0.1973092282
0.1969999043
0.1978208284
0.1971865261
可以看到,跟我算出来的值还是很接近的。

由于不知如何给出单位圆内的随机点,这里我只好用 $[-1,1]^2$ 内的随机点,再进行筛选(将在圆内的筛选出来,在这些里面判断距离再筛选),而这样其实就浪费了很多对点,所以上面这个程序不算好,不知各位有没有更好更优质的程序?
基本信息:kuing,GG,19880618~?,地道广州人,高中毕业,无业游民,不等式爱好者,论坛混混;
现状:冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)

呵呵,原来是你啊,又回到你这儿来了,呵呵。

你用得很熟练了!
有很多字符,编码不太容易找相应的代码,

1# kuing

这里有一篇圆内均匀采点的文章

1# kuing

这里有一篇圆内均匀采点的文章

http://blog.csdn.net/codeboycjy/article/details/6225886

5# chinawgp


先thanks了,有空仔细看下。
基本信息:kuing,GG,19880618~?,地道广州人,高中毕业,无业游民,不等式爱好者,论坛混混;
现状:冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)

5# chinawgp


前面是弄懂了,原来只要加个根号就行了,我怎么没想到呢
后面的就不太懂了,那啥Jacobian行列式什么的……
基本信息:kuing,GG,19880618~?,地道广州人,高中毕业,无业游民,不等式爱好者,论坛混混;
现状:冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)

本帖最后由 都市侠影 于 2012-7-21 11:23 编辑

关于单位圆内的随机点,你可以产生极坐标的嘛,随机产生半径和角度就可以了,然后 x=rcosa,y=rsina

关于单位圆内的随机点,你可以产生极坐标的嘛,随机产生半径和角度就可以了,然后 x=rcosa,y=rsina
都市侠影 发表于 2012-7-21 11:22
关键在于产生出来的是否均匀分布,可以看看5#的链接
基本信息:kuing,GG,19880618~?,地道广州人,高中毕业,无业游民,不等式爱好者,论坛混混;
现状:冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)

9# kuing
那篇文章有道理

7# kuing
哈哈,我找到为什么加根号的原因了,看这里我写的,实际上是反函数http://kkkkuingggg.5d6d.net/thread-622-1-1.html

返回列表