2

如果β ≥ α ,如何生成两个随机数α, β ~ U[-1,+1]

我的第一个意图是只生成两个向量,只取满足β ≥ α的向量并丢弃其余向量。

但是,我认为这可能会改变分布。

4

2 回答 2

3

你有几个简单的选择,但有些会稍微扭曲分布。

最简单的方法是生成一对数字并在必要时交换它们以满足您的条件。这应该产生均匀分布。

另一种选择是先生成α~[-1,+1],然后生成β~U[α,+1]。或者,您可以先生成 β ~ [-1, +1],然后再生成 α ~ [-1, β]。由于第二个数字不是统一生成的,因此该选项会出现偏差。

也许更好的方法是创建向量 (α, β) 到数轴的 1:1 映射。然后生成一个数字,并将其转换为二维向量。如果适当地选择映射,这有可能提供矢量的均匀分布。

于 2018-12-25T08:15:01.117 回答
2

Mad Physicist 的答案已经相当广泛,尽管第二个解决方案产生的结果实际上并不是随机的,因为首先取α ~ U[-1, +1]会向右倾斜,而β ~ U[-1, +1]会向左倾斜。

对于这个问题,最直接的解决方案是生成αβ,然后在β < α时交换它们。结果将是均匀分布的。在 Matlab 中:

a = 2 * rand - 1;
b = 2 * rand - 1;
if b < a
    [b, a] = deal(a, b);
end
disp(a)
disp(b)

如果您将数字表示为整数,则只需将上述方法应用于整数。在 Matlab 中:

a = randi([-1, 1]);
b = randi([-1, 1]);
if b < a
    [b, a] = deal(a, b);
end
disp(a)
disp(b)
于 2018-12-25T09:16:10.230 回答