2013-01-04 21 views
0

作爲輸入,我有兩個數字x和y。 x>y。 我想創建確切的y非零隨機數,其總和將等於x。我知道randi([min max])功能。你可以幫我嗎?用於創建滿足約束條件的隨機數的Matlab函數

+0

剛剛回想起它可能是一個可能的副本[隨機數加100:Matlab](http://stackoverflow.com/questions/8064629/random-numbers-that-add-to-100-matlab) – bla

回答

4

如果我這樣做是正確,你想是這樣的:

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

data將僅包含y正面均勻分佈的數,其總和等於x

0

Leonid的方法肯定會生成一組具有正確總和的隨機數,但它不會在允許的空間內統一選擇。如果這是重要的,那將工作的方法如下:

(其中x = 1):

  1. 生成Y-1的隨機數均勻地[0,1]。
  2. 從最小到最大排序Y-1數字。調用這些{y1,...,y_ {N-1}}
  3. 作爲Y個隨機數集合{y_1-0,y_2-y1,...,1-y_ {N-1}} = = {n_1,... n_Y}。

這些n_i清楚地總結爲一。通過考慮給定實現n_i的概率很容易證明均勻性。