0

作为输入,我有两个数字 x 和 y。x>y. 我想创建y它们的总和等于的完全非零随机数x。我知道randi([min max])函数。你能帮助我吗?

4

3 回答 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):

  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 的概率,很容易证明一致性。

于 2013-02-20T18:58:39.653 回答