【发布时间】:2017-02-26 13:01:39
【问题描述】:
感兴趣的概率分布是
double x; // range: -pi/2.0 to +pi/2.0
double y = std::pow(std::cos(x), 2.0);
这个函数可以解析积分,但不能倒置。因此,无法执行将均匀分布映射到所需概率分布的通常技巧。
还有其他方法可以用来生成随机变量 cos^2(theta) 分布吗?
也许可以通过数值方法找到反函数,但是我不知道有一种有效的(记忆和计算)方法可以做到这一点。
【问题讨论】:
-
拒绝抽样是否可以接受?
-
这不可能是分布 - 它在该范围内的积分不等于 1。如果您按
2/pi缩放它可以挽救它。为了省事,这个案例的累积分布函数是F(x) = (x + sin(2*x)/2 + pi/2) / pi -
@IgorTandetnik 好点——我没有对其进行归一化,因为归一化取决于 x 的范围——因为我写了这篇文章,所以我认为使用 0 到 pi/2.0 的范围可能更容易,而不是问题中指定的原始范围。
标签: c++ c++11 random probability probability-density