数学杂谈:圆上随机落点问题(一)

news2024/12/27 13:55:53
  • 数学杂谈:圆上随机落点问题(一)
    • 1. 问题描述
    • 2. 问题解答
      • 1. 解法一:递推
      • 2. 解法二:受限制的均匀分布
      • 3. 数值模拟验证
    • 3. 讨论 & 扩展

1. 问题描述

这道题其实很早之前自己做过一遍,然后前阵子发现苏神也关于这道题进行了一些讨论,于是就把这道题重新拎出来做了一遍,这里也稍微整理一下这道题的解答。

问题:

  • 在一个圆上随机抛 n n n个点,求问这 n n n个点均在同一个半圆上的概率是多少?

更进一步地,这道题还可以拓展为:

  • 在一个圆上随机抛 n n n个点,求问这 n n n个点均可以被一个弧度为 θ \theta θ θ ≤ π \theta \leq \pi θπ)的弧形完全覆盖的概率是多少?

2. 问题解答

我们首先直接给出答案如下:

  • n n n个点恰好落在弧度为 θ \theta θ的弧形中的概率密度函数为:

p n ( θ ) = n ( n − 1 ) 2 π ( θ 2 π ) n − 2 p_n(\theta) = \frac{n(n-1)}{2\pi}(\frac{\theta}{2\pi})^{n-2} pn(θ)=2πn(n1)(2πθ)n2

  • n n n个点能够被弧度为 θ \theta θ的弧形完全覆盖的概率为:

P n ( θ ) = ∫ 0 θ p n ( φ ) d φ = n ( θ 2 π ) n − 1 P_n(\theta) = \int_{0}^{\theta} p_n(\varphi)d\varphi = n(\frac{\theta}{2\pi})^{n-1} Pn(θ)=0θpn(φ)dφ=n(2πθ)n1

1. 解法一:递推

这一题我的一个直接的思路就是递推,显然,我们有:

p 2 ( θ ) = 1 π p_2(\theta) = \frac{1}{\pi} p2(θ)=π1

要使得 n n n个点恰好构成一个弧度为 θ \theta θ的弧形,可以由以下两种情况构成:

  1. n − 1 n-1 n1个点构成一个弧度为 φ \varphi φ的弧形,且有 φ ≤ θ \varphi \leq \theta φθ,此时第 n n n个点需要与前 n − 1 n-1 n1个点所构成的弧形的左边界或者右边界恰好构成 θ \theta θ角,且这个 θ \theta θ的弧形包含之前全部的 n − 1 n-1 n1个点;
  2. n − 1 n-1 n1个点已经构成一个弧度恰好为 θ \theta θ的弧形,此时第 n n n个点只要落在弧形当中就可以。

因此,我们可以给出递推公式如下:

p n ( θ ) = 1 2 π [ 2 ⋅ ∫ 0 θ p n − 1 ( φ ) d φ + ∫ 0 θ d φ ⋅ p n − 1 ( θ ) ] p_n(\theta) = \frac{1}{2\pi} [2 \cdot \int_{0}^{\theta} p_{n-1}(\varphi) d\varphi + \int_{0}^{\theta}d\varphi \cdot p_{n-1}(\theta)] pn(θ)=2π1[20θpn1(φ)dφ+0θdφpn1(θ)]

综上,我们即可由数学归纳法解出 f n ( θ ) f_n(\theta) fn(θ)的通解表达式如下:

p n ( θ ) = n ( n − 1 ) 2 π ( θ 2 π ) n − 2 p_n(\theta) = \frac{n(n-1)}{2\pi}(\frac{\theta}{2\pi})^{n-2} pn(θ)=2πn(n1)(2πθ)n2

积分即可得到:

P n ( θ ) = ∫ 0 θ p n ( φ ) d φ = n ( θ 2 π ) n − 1 P_n(\theta) = \int_{0}^{\theta} p_n(\varphi)d\varphi = n(\frac{\theta}{2\pi})^{n-1} Pn(θ)=0θpn(φ)dφ=n(2πθ)n1

2. 解法二:受限制的均匀分布

除了递推解法之外,事实上我们也可以将其视为一个受限制的均匀分布的概率求解问题。

我们以任意一个点作为起始点,然后顺时针旋转,显然圆上的 n n n个点就会将整个圆切分为 n n n个圆弧,然后我们要令这 n n n个点可以恰好被一个弧度为 θ \theta θ的弧形覆盖,就是令这 n n n个圆弧中最大的一个值恰好等于 2 π − θ 2\pi-\theta 2πθ

因此,问题也就可以转换为:

p n ( θ ) = C n 1 ⋅ p ( θ i = 2 π − θ ∣ ∑ i = 1 n θ i = 2 π ) = C n 1 ⋅ p ( x i = 1 − θ 2 π ∣ ∑ i = 1 n x i = 1 ) \begin{aligned} p_n(\theta) &= C_{n}^{1} \cdot p(\theta_i = 2\pi - \theta | \sum\limits_{i=1}^{n} \theta_i = 2\pi) \\ &= C_{n}^{1} \cdot p(x_i = 1 - \frac{\theta}{2\pi} | \sum\limits_{i=1}^{n} x_i = 1) \end{aligned} pn(θ)=Cn1p(θi=2πθi=1nθi=2π)=Cn1p(xi=12πθi=1nxi=1)

而关于这个受限制的概率问题,我们在之前的博客文章【数学杂谈:限制条件下的均匀分布考察】当中,事实上已经对这个问题有过了考察,我们直接给出答案如下:

p ( x i = 1 − θ 2 π ∣ ∑ i = 1 n x i = 1 ) = ( n − 1 ) ( θ 2 π ) n − 2 p(x_i = 1 - \frac{\theta}{2\pi} | \sum\limits_{i=1}^{n} x_i = 1) = (n-1) (\frac{\theta}{2\pi})^{n-2} p(xi=12πθi=1nxi=1)=(n1)(2πθ)n2

又因为 x = θ 2 π x = \frac{\theta}{2\pi} x=2πθ,因此,我们将其作变量代换之后即有:

p n ( θ ) = n ( n − 1 ) 2 π ( θ 2 π ) n − 2 p_n(\theta) = \frac{n(n-1)}{2\pi}(\frac{\theta}{2\pi})^{n-2} pn(θ)=2πn(n1)(2πθ)n2

而积分即可计算得到:

P n ( θ ) = ∫ 0 θ p n ( φ ) d φ = n ( θ 2 π ) n − 1 P_n(\theta) = \int_{0}^{\theta} p_n(\varphi)d\varphi = n(\frac{\theta}{2\pi})^{n-1} Pn(θ)=0θpn(φ)dφ=n(2πθ)n1

与上述递推解法得到的结果是完全一致的。

3. 数值模拟验证

最后,我们用monte-carlo模拟来验证一下我们上述结论的可靠性。

给出monte-carlo模拟的代码实现如下:

import math
from random import random
from matplotlib import pyplot as plt

def simulate(theta, n, N=100000):

    def get_radian(plist):
        plist = sorted(plist)
        deltas = [plist[(i+1) % n] - plist[i] + 2 * math.pi for i in range(n)]
        deltas = [x if x < 2 * math.pi else x - 2 * math.pi for x in deltas]
        return math.pi * 2 - max(deltas)
    
    cnt = 0
    for _ in range(N):
        plist = [random() * 2 * math.pi for _ in range(n)]
        radian = get_radian(plist)
        if radian <= theta:
            cnt += 1
    return cnt / N

def plot_simulate(n, delta=10, max_degree=180, N=10000):
    degrees = list(range(0, max_degree, delta))
	degrees.append(max_degree)
    x = [deg / 180 * math.pi for deg in degrees]
    y = [simulate(phi, n) for phi in x]
    z = [n * (deg/360)**(n-1) for deg in degrees]
    plt.figure(figsize=(15, 7))
    plt.scatter(degrees, y, marker="x", label="monte-carlo")
    plt.plot(degrees, z, color="orange", label=r"$P_n ( \theta )$")
    plt.legend()
    plt.grid()
    plt.show()
    return

plot_simulate(5, delta=5, max_degree=180, N=10000)

在这里插入图片描述

可以看到:

  • θ ≤ 180 ° \theta \leq 180\degree θ180°时,曲线与拟合结果符合的非常完美。

3. 讨论 & 扩展

这里,其实大部分读者也都注意到了,这里我们反复地在强调, θ ≤ 180 ° \theta \leq 180\degree θ180°

但是,对于圆上的随机 n n n个点,事实上要能够覆盖住这 n n n个点,所需的最小弧形的弧度是可以大于 180 ° 180\degree 180°的。更确切地,简单计算可以发现,这个最小弧度的最大值可以一直取到 θ = n − 1 n π \theta = \frac{n-1}{n}\pi θ=nn1π

那么,对于 θ ≥ 180 ° \theta \geq 180\degree θ180°的情况时,上述推论是否还成立呢?

答案是不成立,我们直接给出上述曲线拟合结果即可:

在这里插入图片描述

可以看到:

  • 显然,当弧度超过 180 ° 180\degree 180°时,上述拟合公式就不再成立,且两者差距会越来越大。

我们分别说明一下上述两种方法为何在 180 ° 180\degree 180°以上的情况下会失效:

  1. 递推方法
    • 递推方法的第一个部分存在一个隐藏条件,就是当前 n − 1 n-1 n1个点所构成的角度为 ϕ \phi ϕ时,新加入的第 n n n个点所构成的新的弧形所需要覆盖的最小角度为 θ \theta θ,但是这个假设在 θ ≥ 180 ° \theta \geq 180\degree θ180°时不一定成立的,因为有可能另一侧覆盖的角度反而小于 θ \theta θ
  2. 受限均匀分布方法
    • 同样的,首先的均匀分布其实要求的条件是,存在某一个角度不小于 2 π − θ 2\pi-\theta 2πθ,这个条件在 θ ≤ 180 ° \theta \leq 180\degree θ180°的情况下是唯一的,因为至多只能有一个角度大于这个值,因此我们可以直接乘以系数 C n 1 C_{n}^{1} Cn1,但是当 θ ≥ 180 ° \theta \geq 180\degree θ180°时,这个条件就不一定满足了,因此推导的结果自然也就不再满足了。

综上,我们就说明白了为啥上述结论在 θ ≥ 180 ° \theta \geq 180\degree θ180°时不成立。

不过真要求当 θ ≥ 180 ° \theta \geq 180 \degree θ180°的情况下时的解的话,事实上也可以仿照上述受限制下的分布给出 P n ( θ ) P_n(\theta) Pn(θ)的概率如下:

P n ( θ ) = 1 − ∫ 0 2 π − θ d θ 1 ∫ 0 m i n ( 2 π − θ , 2 π − θ 1 ) d θ 2 . . . ∫ 0 m i n ( 2 π − θ , 2 π − ∑ i = 1 n − 2 θ i ) d θ n − 1 ∫ 0 m i n ( 2 π − θ , 2 π − ∑ i = 1 n − 1 θ i ) δ ( θ n = 2 π − ∑ i = 1 n − 1 θ i ) d θ n ∫ 0 2 π d θ 1 ∫ 0 2 π − θ 1 d θ 2 . . . ∫ 0 2 π − ∑ i = 1 n − 2 θ i d θ n − 1 ∫ 0 2 π − ∑ i = 1 n − 1 θ i δ ( θ n = 2 π − ∑ i = 1 n − 1 θ i ) d θ n P_n(\theta) = 1 - \frac{\int_{0}^{2\pi-\theta}d\theta_1 \int_{0}^{\mathop{min}(2\pi-\theta, 2\pi-\theta_1)}d\theta_2 ... \int_{0}^{\mathop{min}(2\pi-\theta, 2\pi-\sum\limits_{i=1}^{n-2}\theta_i)}d\theta_{n-1} \int_{0}^{\mathop{min}(2\pi-\theta, 2\pi-\sum\limits_{i=1}^{n-1}\theta_i)}\delta(\theta_n = 2\pi-\sum\limits_{i=1}^{n-1}\theta_i) d\theta_{n}}{\int_{0}^{2\pi}d\theta_1\int_{0}^{2\pi-\theta_1}d\theta_2 ... \int_{0}^{2\pi-\sum\limits_{i=1}^{n-2}\theta_i}d\theta_{n-1} \int_{0}^{2\pi-\sum\limits_{i=1}^{n-1}\theta_i} \delta(\theta_n = 2\pi-\sum\limits_{i=1}^{n-1}\theta_i) d\theta_{n}} Pn(θ)=102πdθ102πθ1dθ2...02πi=1n2θidθn102πi=1n1θiδ(θn=2πi=1n1θi)dθn02πθdθ10min(2πθ,2πθ1)dθ2...0min(2πθ,2πi=1n2θi)dθn10min(2πθ,2πi=1n1θi)δ(θn=2πi=1n1θi)dθn

即在 ∑ i = 1 n θ i = 2 π \sum\limits_{i=1}^{n}\theta_i=2\pi i=1nθi=2π的情况下,至少存在一个 θ i \theta_i θi使得 θ i ≥ 2 π − θ \theta_i \geq 2\pi-\theta θi2πθ时的概率。

事实上,考虑到 δ \delta δ函数事实上已经内隐的限制条件内容,我们可以简化上式为:

P n ( θ ) = 1 − ∫ 0 2 π − θ d θ 1 ∫ 0 2 π − θ d θ 2 . . . ∫ 0 2 π − θ d θ n − 1 ∫ 0 2 π − θ δ ( θ n = 2 π − ∑ i = 1 n − 1 θ i ) d θ n ∫ 0 2 π d θ 1 ∫ 0 2 π − θ 1 d θ 2 . . . ∫ 0 2 π − ∑ i = 1 n − 2 θ i d θ n − 1 ∫ 0 2 π − ∑ i = 1 n − 1 θ i δ ( θ n = 2 π − ∑ i = 1 n − 1 θ i ) d θ n P_n(\theta) = 1 - \frac{\int_{0}^{2\pi-\theta}d\theta_1 \int_{0}^{2\pi-\theta}d\theta_2 ... \int_{0}^{2\pi-\theta}d\theta_{n-1} \int_{0}^{2\pi-\theta}\delta(\theta_n = 2\pi-\sum\limits_{i=1}^{n-1}\theta_i) d\theta_{n}}{\int_{0}^{2\pi}d\theta_1\int_{0}^{2\pi-\theta_1}d\theta_2 ... \int_{0}^{2\pi-\sum\limits_{i=1}^{n-2}\theta_i}d\theta_{n-1} \int_{0}^{2\pi-\sum\limits_{i=1}^{n-1}\theta_i} \delta(\theta_n = 2\pi-\sum\limits_{i=1}^{n-1}\theta_i) d\theta_{n}} Pn(θ)=102πdθ102πθ1dθ2...02πi=1n2θidθn102πi=1n1θiδ(θn=2πi=1n1θi)dθn02πθdθ102πθdθ2...02πθdθn102πθδ(θn=2πi=1n1θi)dθn

但是,不幸的是,即便有了上述一般的表达式,这依然不是一个可以快速求解的表达式,甚至不确定这个表达式能否真的去解析求解。

不过问了我同学之后,他倒是修正了迭代的方法,给出了一个非常完美的回答,不过这里我就先不做展开了,后面我会花点时间把他的解答好好整理一下之后然后再发出来吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【寒假每日一题】洛谷 P1079 [NOIP2012 提高组] Vigenère 密码

题目链接&#xff1a;P1079 [NOIP2012 提高组] Vigenre 密码 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 16 世纪法国外交家 Blaise de Vigenre 设计了一种多表密码加密算法 Vigenre 密码。Vigenre 密码的加密解密算法简单易用&#xff0c;且破译难度比较高&…

类、对象与接口

前言 类、对象与接口 文章目录前言一、类与对象二、源文件声明的规则三、修饰符四、继承五、多态六、接口1、定义2、接口3、实现4、接口一、类与对象 类&#xff1a;定义一种全新的数据类型&#xff0c;包含一组变量&#xff08;数据&#xff09;和函数&#xff08;逻辑&#…

【django】各种关联关系的模型类设计

文章目录前言一、级联操作二、一对多&#xff08;多对一&#xff09;的关联模型类设计1、学生表模型类设计2、渠道表模型类设计三、多对多的关联模型类设计1、课程表模型类设计四、多对多的关联模型类设计&#xff08;自定义中间表&#xff09;1、模型类设计课程表模型类设计报…

神经网络的学习率如何选择?

文章目录学习率的概念学习率的选择方法参考资料学习率的概念 这里的学习率指的是深度学习神经网络训练过程中选取的一个超参数。 学习率作为参数更新时的一个乘数项&#xff0c;可以影响网络训练的速度&#xff0c;或者说是每次迈步的大小。 可以这样理解&#xff0c;如果学…

ZC706P+ADRV9009连接RADIOVERSE详解之二

上一个BLOG我们在WIN上安装了RADIOVERSE软件以及做好了SD卡映像。这篇文字我们记录ZC706ADRV9009硬件链接情况&#xff1a; 这里看到USB UART串口是可选的&#xff0c;主要是用来查看启动的系统log。 实际连接如下&#xff1a; 图中&#xff1a; 1&#xff0c;外接12V电源 2…

Python数据结构与算法篇(三)-- 队列的实现和应用

1 队列 1.1 简单队列 队列是一种有次序的数据集合&#xff0c;其特征是新数据项的添加总发生在一端&#xff08;通常称为“尾rear”端&#xff09;&#xff1b;而现存数据项的移除总发生在另一端&#xff08;通常称为“首front”端&#xff09;。当一个元素被加入到队列之后&a…

头歌作业之排序1、2、3、4

&#xff08;PS&#xff1a;直接拿的友友zy的&#xff09; 一个不知名大学生&#xff0c;江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2023.1.1 Last edited: 2023.1.1 目录 &#xff08;PS&#xff1a;直接拿的友友的&a…

SCI论文解读复现【NO.2】基于注意机制的YOLOv5改进算法在行星图像中的应用(代码已复现)

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的SCI论文&am…

EMNLP22提示模板生成:GPS: Genetic Prompt Search for Efficient Few-shot Learning

GPS: Genetic Prompt Search for Efficient Few-shot Learning 1 简介 Genetic Prompt Search (GPS) 通过提示改进少样本学习&#xff0c;它利用遗传算法自动搜索高性能提示 遗传提示搜索 (GPS) 算法&#xff0c;该算法使用生成模型逐渐改变提示&#xff0c;并根据它们在小型…

C语言网刷题记录

作者&#xff1a;会敲代码的Steve 座右铭&#xff1a;博学笃志&#xff0c;切问静思。 大家好久不见啊&#xff0c;一看时间我已经好久没发文章了&#xff0c;最近在刷OJ题和学习&#xff1b;就没那么多心思把时间花在写文章上了&#xff0c;我对此感到很抱歉&#xff0c;本文呢…

int8,FLOPS,FLOPs,TOPS 等具体含义

1、定义 算力的计量单位FLOPS&#xff08;Floating-point operations per second&#xff09;&#xff0c;FLOPS表示每秒浮点的运算次数。具体使用时&#xff0c;FLOPS前面还会有一个字母常量&#xff0c;例如TFLOPS、PFLOPS。这个字母T、P代表次数&#xff0c;T代表每秒一万亿…

Linux学习笔记——MySQL数据库管理系统安装部署

5.1、MySQL数据库管理系统安装部署 5.1.1、简介 1、MySQL简介 MySQL数据库管理系统&#xff08;后续简称MySQL&#xff09;&#xff0c;是一款知名的数据库系统&#xff0c;其特点是&#xff1a;轻量、简单、功能丰富。 MySQL数据库可谓是软件行业的明星产品&#xff0c;无…

xilinx ZYNQ 7000 AXI GPIO

.0AXI GPIO 第一部分 PS 和 PL之间的通讯有一个接口称为AXI。AXI总线具体的内容这边不去深究&#xff0c;可以理解为一种特殊协议的通讯方式。 AXI GPIO是什么意思&#xff1f; PL是FPGA它可以做成任何你想要的东西&#xff0c;做一个GPIO外设当然是可以的。 如上图所示&…

DoIP协议从入门到精通——通信建立

在DoIP专栏中,关于DoIP文章,主要讲述从车辆物理连接、车辆声明、车辆通信激活(Routine Activation)和诊断通信几个步骤。 本文介绍了Tester与车辆获取物理连接、车辆声明自身信息后接下来需要操作的就是本文所要分享的内容:Tester与车辆控制器的通信建立。 一、通信模式…

记一次堆外内存泄漏分析

文章目录1. 背景2. JVM 内存分布与分析2.1 JVM 内存分布2.2 堆外内存泄漏分析思路2.3 服务器 JVM 参数配置及实际内存分布2.4 JVM native 内存查看2.5 手动触发 Full GC3. 问题排查经历3.1 定位内存泄漏的位置及初步猜想1&#xff09;定位 RES 区域存在内存泄漏2&#xff09;分…

寒假每日一题W1D1——孤独的照片

题目描述 Farmer John 最近购入了 N 头新的奶牛&#xff0c;每头奶牛的品种是更赛牛&#xff08;Guernsey&#xff09;或荷斯坦牛&#xff08;Holstein&#xff09;之一。 奶牛目前排成一排&#xff0c;Farmer John 想要为每个连续不少于三头奶牛的序列拍摄一张照片。 然而&…

一本通 1267:【例9.11】01背包问题(详细代码)

经典01背包问题 这里给你3种方法 目录 DFS 思路&#xff1a; 代码&#xff1a; DFS记忆化 思路&#xff1a; 代码&#xff1a; 动态规划 思路&#xff1a; 代码&#xff1a; DFS 时间复杂度 &#xff1a;O(2^n) 思路&#xff1a; DFS求出所有选法&#xff0c;再用…

Maven 之 依赖管理

目录 1、依赖传递 小案例&#xff1a; 2、可选依赖 3、 排除依赖 4、可选依赖和排除依赖的区别 我们开发一个工程需要用到大量得jar包&#xff0c;而这些jar 包就是我们所说得依赖&#xff0c;一个项目可以配置多个依赖。 1、依赖传递 我们来看一下今天用来演示的工程。…

Linux性能学习(1.4):CPU_如何查看CPU上下文切换参数

文章目录1 系统总体上下文参数2 进程的上下文切换参数3 其它参考资料&#xff1a;vmstat&#xff1a;一个标准的报告虚拟内存统计工具 在前面大致了解了上下文切换的相关知识&#xff0c;那么如何在系统中查看上下文切换相关的参数&#xff1f; 1 系统总体上下文参数 使用vm…

人工势场法路径规划算法(APF)

本文主要对人工势场法路径规划算法进行介绍&#xff0c;主要涉及人工势场法的简介、引力和斥力模型及其推导过程、人工势场法的缺陷及改进思路、人工势场法的Python与MATLAB开源源码等方面 一、人工势场法简介 人工势场法是由Khatib于1985年在论文《Real-Time Obstacle Avoidan…