用于创建满足约束的随机数的Matlab函数



作为输入,我有两个数字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(:

  1. 在[0,1]上均匀生成Y-1随机数
  2. 从最小到最大对Y-1数字进行排序。称这些为{y1,…,y_{N-1}}
  3. 取集合{Y_1-0,Y_2-y1,…,1-Y_{N-1}}={N_1,…N_Y}为Y个随机数

这些n_i显然加为1。通过考虑n_i的给定实现的概率,很容易证明一致性。

最新更新