作为输入,我有两个数字x和y。 x>y
。
我想准确创建y
非零随机数,其总和将等于x
。我知道randi([min max])
功能。你能救我吗?
答案 0 :(得分:4)
如果我做对了,你想要这样的东西:
data = rand(1,y);
data = data * x / sum(data);
data
将包含完全y
个正均匀分布的数字,其总和等于x
。
答案 1 :(得分:2)
在Matlab FEX中查看文件random vectors generator with fixed sum。我相信这会回答你的问题。
答案 2 :(得分:0)
Leonid的方法肯定会生成一组具有正确总和的随机数,但它不会在允许的空间内均匀选择。如果这很重要,那么可行的方法如下:
(x = 1):
这些n_i显然是一个。通过考虑给定实现n_i的概率,很容易证明均匀性。