几何概率 · Buffon's Needle

蒲丰投针

把长为 L 的针随机投到间距为 ℓ 的平行线平面上,用相交频率估算圆周率 π——这是历史上第一个蒙特卡洛实验。

法国博物学家布丰在 1733 年提出这个几何概率问题,并在 1777 年发表解答。它把一次看似随意的投针实验与圆周率联系起来,后来成为随机模拟思想的经典先声。

§

游戏规则

  • 目标用大量随机投针,估算圆周率 π 的近似值。
  • 操作点击批量按钮投针,或直接点击画布追加一根针。
  • 判定针与任意一条平行线相交记为「相交」,否则「不相交」。
  • 原理π ≈ 2L·N / (ℓ·K),其中 K 为相交针数,N 为总投针数。
实验画面

📍 蒲丰投针 · 蒙特卡洛估算 π

红色为与平行线相交的针,蓝色为不相交的针。

📐 经典 0/1 判定
教科书上的原始做法:相交记 1,不相交记 0。有限画布采用完整条带与缓冲区,避免边缘截断造成偏差。
—
估算的 π 值
π = 3.14159265358979
总投针数
0
相交针数
0
绝对误差
—
相对误差
—
正在投针…
π 估计值收敛曲线(浅蓝带为约 95% 理论波动范围)
⚙

参数说明

  • 平行线—
  • 线间距 ℓ—
  • 针长比例—
  • 相交概率—
  • 估算式π̂ = 2L·N / (ℓ·K)
▸

操作指南

  1. 点击批量按钮投针,或直接点击画布投一根。
  2. 观察 π 近似值随投针数增多而趋近 3.14159。
P(相交) = 2L / (πℓ)  →  π̂ = 2L·N / (ℓK)
第一部分:无限平面上的经典结果
蒲丰投针的相交条件 长度 L 小于线间距 ℓ。中心 C 到最近线的距离 X 小于半根针的垂直投影,因此针穿过平行线。 平行线最近的平行线 ℓ 针长 L 中心 C θ X (L/2) sinθ 相交点 相交条件:X ≤ (L/2) sinθ
θ 是针与平行线的夹角。比较中心距离 X 与半针的垂直投影,就能判断是否相交;下文依次计算固定角度下的概率,再对所有角度积分。
构图参考:伊利诺伊大学 Buffon’s Needle 教学图;本页按统一符号重新绘制。

设无限平面上画有间距为 ℓ 的平行直线,针长为 L,并要求 0 < L ≤ ℓ。每次投针相互独立;针的中心位置相对于平行线均匀,针的方向也均匀。

符号含义分布或取值
Θ针与平行线的锐夹角Θ ~ Uniform(0, π/2),密度 2/π
X针中心到最近平行线的距离X ~ Uniform(0, ℓ/2),密度 2/ℓ
I是否相交的指示变量相交为 1,否则为 0

1. 几何相交条件

针在垂直于平行线方向上的半投影长度是 (L/2)sinΘ。只有当针中心到最近线的距离不超过这个投影时,针才会越过平行线:

I = 1  ⇔  X ≤ (L/2)sinΘ

2. 固定角度后计算相交概率

给定 Θ=θ 后,X 在 [0,ℓ/2] 上均匀,所以“有利长度”除以“总长度”得到:

P(I=1 | Θ=θ) = [(L/2)sinθ] / (ℓ/2) = (L/ℓ)sinθ

3. 对所有方向取平均

再对 θ∈[0,π/2] 按均匀方向密度 2/π 积分:

p = ∫₀^(π/2) (L/ℓ)sinθ · (2/π)dθ = (2L)/(πℓ)

其中 ∫₀^(π/2)sinθ dθ=1。线有多少条并不出现在最终概率中;关键是针中心相对于线间距的“相位”必须均匀。

4. 从相交频率反推 π

连续投 N 次,令 K=I₁+⋯+Iₙ 为相交次数,则 K ~ Binomial(N,p),样本相交率 p̂=K/N。由大数定律 p̂→p,因此:

π = 2L/(ℓp)  ⇒  π̂ = 2L/(ℓp̂) = 2L·N/(ℓK)

当 K=0 时分母为零,π̂ 暂时没有定义;这也是页面在实验初期可能显示“—”的原因。

第二部分:有限画布上的蒲丰投针

无限平面的证明不能直接套到任意矩形画布。本实验不是简单地把无限平面截断,而是特意构造“整数个完整条带+半针长缓冲区”,使有限画布中的随机变量 X 与无限平面完全同分布。

1、实验设置

画布高度记为 H,选择 q 条平行线,于是完整条带数 m=q−1。令针长比例 r=L/ℓ,页面按下式同时确定线间距和针长:

ℓ = H/(m+r),    L = rℓ,    y₀ = L/2

针中心的纵坐标 Y 均匀取自 [y₀, y₀+mℓ];上下各留下 L/2 的缓冲区。横坐标均匀取自 [L/2, W−L/2],所以针无论取什么角度都不会越出画布。

若允许针伸出左右边界,针可能在画布外才与直线相交;若把这种针丢弃,又会让不同角度具有不同的保留概率。本实验把针中心在水平和垂直方向都缩进 L/2,保证整根针及其交点始终位于画布内,因此不需要拒绝采样。

2、π 的估计

定义针中心在一个条带内的位置 U=(Y−y₀) mod ℓ。由于 Y 的取值区间恰好由 m 个长度均为 ℓ 的完整周期组成,每个周期对 U 的贡献完全相同,因此:

U ~ Uniform(0,ℓ),    X = min(U,ℓ−U) ~ Uniform(0,ℓ/2)

这不是“大画布近似无限平面”,而是一个精确的有限构造。X 和 Θ 的联合分布与经典模型相同,所以有限画布仍严格满足 p=2L/(πℓ)。

p = ∫₀^(π/2) (L/ℓ)sinθ·(2/π)dθ = 2L/(πℓ)
π̂ = 2L·N/(ℓK)

3、误差分析

相交次数 K 服从二项分布。样本相交率的标准差为 √[p(1−p)/N]。对 π̂=2r/p̂ 使用一阶 Delta 方法,可得到 π 估计量的近似标准误:

SE(π̂) ≈ π√[(1−p)/(Np)] ≈ π̂√[(1−p̂)/(Np̂)]

因此一次实验约有 95% 的概率落在“真值上下约 1.96 个标准误”的典型波动范围内。标准误按 1/√N 缩小:投针数增加 100 倍,典型误差才缩小约 10 倍。

本次模拟的误差诊断

当前设置—
样本相交率 p̂=K/N—
当前 π̂—
估计标准误 SE—
约 95% 典型误差阈值—
本次实际绝对误差—
开始投针后,这里会把理论误差与上方模拟结果逐项对应。

由于函数 1/p̂ 是非线性的,π̂ 在有限样本下有轻微向上的偏差。二阶近似为 Bias(π̂)≈π(1−p)/(Np),但它同样随 1/N 消失。以上标准误和 95% 范围属于大样本近似;当 N 很小或 K=0 时,不应把它当作可靠区间。