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

创建满足约束的随机数的Matlab函数,matlab,random,Matlab,Random,作为输入,我有两个数字x和yx>y。 我想精确地创建y非零随机数,它们的和将等于x。我知道randi([min-max])函数。你能帮我吗?在Matlab FEX中查看该文件。我相信这将回答您的问题。请查看Matlab FEX中的文件。我相信这会回答你的问题。如果我答对了,你想要这样的东西: data = rand(1,y); data = data * x / sum(data); 数据将精确地包含y正均匀分布的数字,其总和等于x如果我做对了,您希望这样: data = rand(1,y);

作为输入,我有两个数字x和y<代码>x>y。
我想精确地创建
y
非零随机数,它们的和将等于
x
。我知道
randi([min-max])
函数。你能帮我吗?

在Matlab FEX中查看该文件。我相信这将回答您的问题。

请查看Matlab FEX中的文件。我相信这会回答你的问题。

如果我答对了,你想要这样的东西:

data = rand(1,y);
data = data * x / sum(data);

数据
将精确地包含
y
正均匀分布的数字,其总和等于
x

如果我做对了,您希望这样:

data = rand(1,y);
data = data * x / sum(data);

数据
将精确地包含
y
正均匀分布的数字,其总和等于
x

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显然是一个。通过考虑n_i给定实现的概率,很容易证明一致性

    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显然是一个。通过考虑n_i给定实现的概率,很容易证明一致性

    谢谢我会检查一件事所有的y数字都应该是非零的谢谢我会检查一件事所有的y数字都应该是非零的