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

时间:2013-01-04 22:16:43

标签: matlab random

作为输入,我有两个数字x和y。 x>y。 我想准确创建y非零随机数,其总和将等于x。我知道randi([min max])功能。你能救我吗?

3 个答案:

答案 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):

  1. 在[0,1]上均匀生成Y-1个随机数。
  2. 将Y-1数字从最小到最大排序。将这些{y1,...,y_ {N-1}}
  3. 称为
  4. 将Y {y_1随机数作为{y_1-0,y_2-y1,...,1-y_ {N-1}} == {n_1,... n_Y}。
  5. 这些n_i显然是一个。通过考虑给定实现n_i的概率,很容易证明均匀性。