作为输入,我有两个数字x和y。x>y
。我想创建恰好为y
的非零随机数,它们的和将等于x
。我知道randi([min max])
的功能。你能帮我吗?
如果我做对了,你想要这样的东西:
data = rand(1,y);
data = data * x / sum(data);
CCD_ 5将恰好包含和等于CCD_ 7的CCD_ 6正均匀分布数。
在Matlab FEX中检查具有固定和的文件随机向量生成器。我相信这会回答你的问题。
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的给定实现的概率,很容易证明一致性。