hawkzmy 发表于 2024-6-11 16:47:50

单位正方形内随机均匀分布N个点,求最近两点的距离的期望值。

单位正方形内随机均匀分布N个点,求最近两点的距离的期望值。

aimisiyou 发表于 2024-6-11 18:45:30

“随机均匀”是怎么定义的?

KeyTo9_Fans 发表于 2024-6-11 18:55:36

N=2的解答如下:
https://bbs.emath.ac.cn/data/attachment/forum/month_1011/10111316359ac847aaffaad267.png

KeyTo9_Fans 发表于 2024-6-12 09:01:48

用蒙特卡罗方法运行了一晚上,可以得到如下表所示的数据:

根据表中数据,当N很大的时候,N个点最小距离的期望值大约是1/(sqrt(2)*(N-2)+2)

程序还在继续运行中,我打算运行1个月后再查看最新结果

#####

1个月的时间到了,最新结果在第12楼

wayne 发表于 2024-6-12 09:43:01

其实是老题目了, 不过改编的是最小距离的期望, 如果是平均距离的期望,那也是有解答的.
https://math.stackexchange.com/questions/1294800/average-distance-between-two-randomly-chosen-points-in-unit-square-without-calc
https://mathworld.wolfram.com/SquareLinePicking.html
https://en.wikipedia.org/wiki/Mean_line_segment_length#Square_and_rectangles
我先无脑 开满 多线程 蒙特卡洛模拟一波. 5秒钟 模拟$10^7$次.
$2$个点的,是$0.521489$,
pool=ParallelTable,2],{2}]],10^7];Mean
$3$个点的,是$0.305585$
pool=ParallelTable,3],{2}]],10^7];Mean
$4$个点的,是$0.211727$
跟fans的基本相同,
那我就干脆 略了...

wayne 发表于 2024-6-13 19:48:45

rust 30行代码。
use std::time::SystemTime;
use rand::Rng;

fn main() {
    let epoch = SystemTime::now();
    let mut rng = rand::thread_rng();

    for len in 2..=20{
      let mut pool = vec!;
      let mut sol = 0f64;
      for n in 1..=1000000 {
            for i in 0..2*len{
                pool = rng.gen::<f64>();
            }
            let mut tmp = std::f64::MAX;
            for i in 0..len{
                for j in i+1..len{
                  let dx = pool-pool;
                  let dy = pool-pool;
                  let d = (dx*dx+dy*dy).sqrt();
                  if d<tmp{
                        tmp = d;
                  }
                }
            }
            sol += (tmp-sol)/(n as f64);
      }
      println!("{:?}\t{:>2}: {:>}",SystemTime::now().duration_since(epoch).unwrap(), len,sol);
    }
}


18.07081886s   2: 0.5214912191455748
45.97656493s   3: 0.305557455784975
84.044407247s    4: 0.2117282517252658
132.5894282s   5: 0.16236415849598956
192.371464127s   6: 0.1318543904439271
263.58566402s    7: 0.11101626645855782
346.481123341s   8: 0.09591456840176349
441.712758225s   9: 0.08439559935297665
549.852933781s10: 0.0753744652101195
670.159919181s11: 0.06811189075539963
803.926296491s12: 0.062114209340580664
951.673796245s13: 0.057053982004033256
1113.986331777s 14: 0.05281346572185144
2213.947713721s 15: 0.0491372395672005
2408.412530057s 16: 0.04593105254462259
2621.344841917s 17: 0.04313378971583958
2852.501608678s 18: 0.04066015874433873
3100.381144134s 19: 0.038448076593099435
3365.935709113s 20: 0.03645890976464638

hawkzmy 发表于 2024-6-14 11:07:23

本帖最后由 hawkzmy 于 2024-6-14 11:18 编辑

最小距离的期望值,不是平均距离。

hawkzmy 发表于 2024-6-14 11:10:44

本帖最后由 hawkzmy 于 2024-6-14 11:21 编辑

有没有解析解?

hawkzmy 发表于 2024-6-14 11:13:54

aimisiyou 发表于 2024-6-11 18:45
“随机均匀”是怎么定义的?

均匀分布就是:不是泊松分布、不是正态分布等等,是均匀的分布,平均每个地方的点一样多。

hawkzmy 发表于 2024-6-14 16:27:47

KeyTo9_Fans 发表于 2024-6-12 09:01
用蒙特卡罗方法运行了一晚上,可以得到如下表所示的数据:

根据表中数据,当N很大的时候,N个点最小距离的 ...

这是经验公式还是计算结果?
页: [1] 2
查看完整版本: 单位正方形内随机均匀分布N个点,求最近两点的距离的期望值。