面试模拟场景
面试官: 你能分别解释一下如何在半径为1的圆和球内等概率取点吗?
参考回答示例
在半径为1的圆内等概率取点
1. 半径为1的圆内等概率取点的基本要求
均匀分布的定义:
- 在半径为1的圆内等概率取点,要求点的位置分布在整个圆内均匀,即每个点被取到的概率密度是均匀分布的。
2. 在圆内等概率取点的步骤
步骤1:生成均匀分布的角度
- 首先,我们需要在圆周上均匀生成一个角度。可以通过以下方法实现:
- 在 [ 0 , 2 π ] [0, 2\pi] [0,2π] 区间内生成一个均匀分布的随机数 θ \theta θ,表示点相对于圆心的角度。
- θ \theta θ 是从圆心到点的径向线与水平轴之间的角度。
步骤2:生成均匀分布的半径
- 接下来,我们需要生成一个对应半径
r
r
r 的随机数。注意,由于圆的面积与半径的平方成正比,因此不能直接在
[
0
,
1
]
[0, 1]
[0,1] 区间内生成均匀分布的随机数作为半径(半径越大的地方单位面积越大),而是需要平方根的变换。
- 在 [ 0 , 1 ] [0, 1] [0,1] 区间内生成一个均匀分布的随机数 u u u。
- 计算对应的半径
r
r
r 为:
r = u r = \sqrt{u} r=u
- 这样生成的 r r r 值使得点在圆内均匀分布。
步骤3:将角度和半径转换为笛卡尔坐标
- 最后,将生成的角度
θ
\theta
θ 和半径
r
r
r 转换为笛卡尔坐标系中的点
(
x
,
y
)
(x, y)
(x,y):
x = r cos ( θ ) x = r \cos(\theta) x=rcos(θ)
y
=
r
sin
(
θ
)
y = r \sin(\theta)
y=rsin(θ)
其中,
(
x
,
y
)
(x, y)
(x,y) 是圆内的一个随机点,均匀分布在圆的面积中。
3. 解释与总结
为什么需要平方根:
- 生成的半径 r r r 需要经过平方根变换 r = u r = \sqrt{u} r=u,以保证点在圆内均匀分布。这是因为如果直接使用 r = u r = u r=u 的线性关系,生成的点将更多地集中在靠近圆心的位置,而不是均匀分布在整个圆内。
总结:
- 要在半径为1的圆内等概率取点,需要先在 [ 0 , 2 π ] [0, 2\pi] [0,2π] 区间内生成均匀分布的角度,然后在 [ 0 , 1 ] [0, 1] [0,1] 区间内生成均匀分布的随机数,并对其取平方根以获得半径,最后将角度和半径转换为笛卡尔坐标得到圆内的随机点。
在半径为1的球内等概率取点
1. 半径为1的球内等概率取点的基本要求
均匀分布的定义:
- 在半径为1的球内等概率取点,要求点在球内的任意位置出现的概率是相等的,即各个点的位置应服从均匀分布。这意味着取样的点集应该在体积元素上的概率密度是均匀的。
2. 在球内等概率取点的步骤
步骤1:生成均匀分布的方向(球面均匀取点)
- 首先需要在单位球面上生成一个均匀分布的方向向量。可以通过以下方法实现:
- 在 [ − 1 , 1 ] [-1, 1] [−1,1] 区间内生成三个独立的均匀分布的随机数 x 1 , x 2 , x 3 x_1, x_2, x_3 x1,x2,x3。
- 将这些随机数组成的向量
(
x
1
,
x
2
,
x
3
)
(x_1, x_2, x_3)
(x1,x2,x3) 归一化为单位向量,即将其投影到单位球面上:
u = ( x 1 , x 2 , x 3 ) x 1 2 + x 2 2 + x 3 2 \mathbf{u} = \frac{(x_1, x_2, x_3)}{\sqrt{x_1^2 + x_2^2 + x_3^2}} u=x12+x22+x32(x1,x2,x3)
- 这样得到的向量 u \mathbf{u} u 是球面均匀分布的。
步骤2:生成径向距离的分布
-
现在需要生成一个均匀分布在球体内的点的径向距离。注意,径向距离 r r r 的概率密度在球内不是线性的,而是与 r 3 r^3 r3 成正比的,因此我们不能直接在 [ 0 , 1 ] [0, 1] [0,1] 区间内取均匀分布的随机数作为径向距离。
-
正确生成径向距离的方法如下:
- 在 [ 0 , 1 ] [0, 1] [0,1] 区间内生成一个均匀分布的随机数 u u u。
- 将这个随机数转换为
r
r
r 的值:
r = u 1 / 3 r = u^{1/3} r=u1/3
- 这样生成的 r r r 值使得点在球体内均匀分布。
步骤3:将径向距离和方向结合
- 最后,将步骤1中生成的单位向量
u
\mathbf{u}
u 与步骤2中生成的径向距离
r
r
r 相乘,得到球体内的均匀分布点:
p = r × u \mathbf{p} = r \times \mathbf{u} p=r×u
其中, p \mathbf{p} p 是球内的一个随机点,均匀分布在球的体积中。
3. 总结与应用
总结:
- 要在半径为1的球内等概率取点,需要先生成球面上的均匀分布方向向量,然后生成与球体体积分布相一致的径向距离,最后将这两个结果结合起来,得到一个均匀分布在球体内的点。
应用:
- 这种方法广泛应用于计算几何、蒙特卡罗模拟、计算物理等领域。例如,在模拟高维球体体积、积分计算、以及随机搜索算法中,均匀分布在球体内取点是一个基础操作。