我想生成三个随机变量 a、b 和 c 使得 (i) a+b+c=0; (ii) 每个都均匀分布在 (-1,1) 中。
双变量版本很简单:a=2*rand()-1; b=-a。(注:rand() 均匀分布在 (0,1) 中)
以下解决方案不起作用,因为 c 的范围太大:a=2*rand()-1; b=2*rand()-1; c=-ab。
以下解决方案也不起作用,因为 c 不是均匀分布的: a=2*rand()-1; b=2*rand()-1; c=(-ab)/2。
我想生成三个随机变量 a、b 和 c 使得 (i) a+b+c=0; (ii) 每个都均匀分布在 (-1,1) 中。
双变量版本很简单:a=2*rand()-1; b=-a。(注:rand() 均匀分布在 (0,1) 中)
以下解决方案不起作用,因为 c 的范围太大:a=2*rand()-1; b=2*rand()-1; c=-ab。
以下解决方案也不起作用,因为 c 不是均匀分布的: a=2*rand()-1; b=2*rand()-1; c=(-ab)/2。
在我们知道您的要求是否可能之前,您可能会对稍微不同的问题的答案感兴趣:
是否有可能拥有三个均匀分布的变量 a、b、c,使得它们总和为零?
答案是肯定的:例如,您采用三个均匀分布的变量 a0,b0,c0 和 s=a0+b0+c0 您可以得到 a=a0-s/3, b=b0-s/3 和 c=c0- s/3 具有所需的属性。如果您从a0,b0,c0 = 1.5*rand()-0.75
结果 a,b,c 开始,将在 [-1,1] 中,a,b,c 的分布将约为。看起来像这样:
现在,如果您希望 a,b,c 更接近 [-1,1] 上的均匀分布,您可以尝试类似a0,b0,c0 = 0.75*(2*rand()-1)^(1/3)
的方法,它会为 a,b,c 产生类似于以下的分布:
它们会均匀分布吗?
我会说投掷 3 个骰子,但预期值是 10.5,这永远不会发生,所以我要说投掷 3 个仅从 1 到 5 的特殊骰子,它们的总和必须为 9。
可能的组合是:
1,3,5和2,3,4的组合有6种,1,4,4和2,25的组合有3种,3,3,3的组合只有一种。这是 19 种可能的组合(在 125 种可能的场景中)。
在这些中,我们得到这些骰子被掷出的次数。(请记住,在 2、2、5 中,每 2 计算 3*,因此是 2 的 6 卷)。
因此,虽然原始分布是均匀的,但一旦你加入约束,你就会发现它不再是均匀的。(请注意,这些数字加到 57 以作为确认,19 种不同的组合,每种组合 3 次投掷)。
吴,你是对的,有一个解决办法。这里是建筑。生成 a = 2*rand()-1。现在如果 a < 0,则令 b = a + 1。否则,令 b = a - 1。最后,令 c = -(a+b)。
不难证明 a、b 和 c 在 [-1,1] 上均匀分布。有趣的是,解决方案是对称的,因为所有三个成对相关都是 -1/2。它只需要一次调用随机生成器。