作为输入,我有两个数字 x 和 y。x>y
. 我想创建y
它们的总和等于的完全非零随机数x
。我知道randi([min max])
函数。你能帮助我吗?
问问题
1459 次
3 回答
4
如果我做对了,你想要这样的东西:
data = rand(1,y);
data = data * x / sum(data);
data
将包含精确y
的正均匀分布数,其总和等于x
.
于 2013-01-04T22:24:53.367 回答
2
在 Matlab FEX 中查看具有固定总和的文件随机向量生成器。我相信这会回答你的问题。
于 2013-01-04T22:19:50.210 回答
0
Leonid 的方法肯定会生成一组具有正确总和的随机数,但它不会在允许的空间上统一选择。如果这很重要,那么可行的方法如下:
(x = 1):
- 在 [0,1] 上均匀生成 Y-1 个随机数。
- 将 Y-1 数字从小到大排序。调用这些 {y1,...,y_{N-1}}
- 将集合 {y_1-0 ,y_2-y1,...,1-y_{N-1}} == {n_1,... n_Y} 作为 Y 随机数。
这些 n_i 显然总和为 1。通过考虑给定实现 n_i 的概率,很容易证明一致性。
于 2013-02-20T18:58:39.653 回答