【问题标题】:Generate 2 random numbers生成 2 个随机数
【发布时间】:2019-05-24 00:49:59
【问题描述】:

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

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

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

【问题讨论】:

  • 也许这个问题更适合MathematicsCross Validated
  • 您可以生成 A ~ U(-1,+1) 和 B ~ U(-1,+1) 但从 B 保留的实际上是 (B | B >= A)这不是〜U(-1,+ 1)。如果这是你想要的,这没有什么问题。你想要条件分布吗?或者只是如何生成这个?

标签: matlab random distribution uniform-distribution


【解决方案1】:

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

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

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

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

【讨论】:

  • 我的印象是,您的第二个解决方案虽然在计算上更胜一筹,但会产生与 OP 的想法相同的结果。 +1 第一个建议,它的简单性很美:)
  • @Dev-iL。我想你是正确的。第一个解决方案的分布将不那么偏斜。我添加了另一种可能性。
  • 我看到了另一个解决方案,我也很喜欢 :) 顺便说一句,您确定要恢复我对问题的编辑吗?
  • 这是一个意外的回归,因为我在移动设备上,一切都很慢。话虽如此,我认为在这种情况下添加一堆通用标签并不是一个好主意。
  • 方法 1 在二维三角域内产生均匀分布。方法 2 产生 alpha 的均匀边际分布。挑战:使两个边际分布均匀! :)
【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    相关资源
    最近更新 更多