如何在两变量之和大于0的区域内均匀采样两个随机变量
方案缺陷
你设计的条件采样逻辑会导致联合概率密度随x变化,并非常数,因此出现分布不均的问题:
- 原方案中X服从
U(-1,1),边缘密度为f_X(x)=1/2 - 给定x时Y的条件采样区间长度为
1 - (-x) = 1+x,因此条件密度为f_{Y|X}(y|x) = 1/(1+x) - 联合密度为两者乘积:
f(x,y) = 1/(2(1+x)),该值随x增大而减小,和你观察到的「左密右疏」现象完全吻合
你原方案的采样结果如下图所示,分布不均的特征和推导的密度变化完全对应:
修正方案
方案1:拒绝采样(实现最简单)
直接在更大的正方形区域采样,丢弃不符合条件的样本,拒绝率仅50%,绝大多数场景下足够高效:
- 独立采样
X ~ U(-1, 1)、Y ~ U(-1, 1) - 若满足
X + Y > 0则保留样本,否则重复采样步骤
方案2:逆变换采样(无拒绝,效率100%)
通过调整X的采样分布,保证联合密度为常数,适合需要严格控制采样次数的场景:
- 先采样均匀随机数
u ~ U(0, 1) - 转换得到X的取值:
x = 2 * sqrt(u) - 1(由X的边缘分布CDF求逆得到) - 再在给定x的条件下采样Y:
Y ~ U(-x, 1)
内容的提问来源于stack exchange,提问作者krishna
相关产品推荐
相关产品推荐


