random number generation for known sum
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
harley
am 27 Aug. 2013
Kommentiert: Tejas
am 14 Jul. 2020
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
0 Kommentare
Akzeptierte Antwort
Azzi Abdelmalek
am 27 Aug. 2013
n=60;
m=1:n;
a=m(sort(randperm(60,15)));
b=diff(a);
b(end+1)=60-sum(b)
sum(b)
13 Kommentare
Bruno Luong
am 13 Jul. 2020
Bearbeitet: Bruno Luong
am 13 Jul. 2020
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
am 14 Jul. 2020
Integering the solution from Roger's function works very well for me. I do not require the numbers to be perfectly uniform. Thanks!
Weitere Antworten (1)
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!