产生2个随机数

时间:2018-12-25 08:08:14

标签: matlab random distribution uniform-distribution

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

我的初衷是只生成两个向量,而仅取满足β≥α的向量。

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

2 个答案:

答案 0 :(得分:3)

您有几个简单的选项,但有些选项会使分布有些偏斜。

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

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

也许更好的方法是创建向量(α,β)与数字线的1:1映射。然后生成一个数字,并将其转换为2D向量。如果正确选择映射,则有可能提供矢量的均匀分布。

答案 1 :(得分:2)

疯狂物理学家的答案已经相当广泛了,尽管第二种解决方案得出的结果实际上并不是随机的,因为首先采用α〜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)