random number generation for known sum

2 次查看(过去 30 天)
i what do generate some 15 random numbers that sum for each separate value of say, 60 , 70, 40, 65. How would i go abouts this?
sum = [60 70 40 65];
n=15;
b = [ ];
for i = 1:1:n,
a = randi([1,??]);
b = [b a];
end

采纳的回答

Azzi Abdelmalek
Azzi Abdelmalek 2013-8-27
n=60;
m=1:n;
a=m(sort(randperm(60,15)));
b=diff(a);
b(end+1)=60-sum(b)
sum(b)
  13 个评论
Bruno Luong
Bruno Luong 2020-7-13
编辑:Bruno Luong 2020-7-13
The easiest way is perhaps using Roger FEX function, then do some sort of "integering" the float solution
sumatarget = 60
n = 15;
ub = 7;
x = floor([0; cumsum(randfixedsum(n,1,sumatarget,0,ub))]);
x(end) = sumatarget; % prevent floating point error
r = diff(x)
The distribution might be not perfectly uniform but possibly close enough and suitable for what ever you want to do with it.
Tejas
Tejas 2020-7-14
Integering the solution from Roger's function works very well for me. I do not require the numbers to be perfectly uniform. Thanks!

请先登录,再进行评论。

更多回答(1 个)

Walter Roberson
Walter Roberson 2013-8-27

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by