random number generation for known sum

11 visualizaciones (últimos 30 días)
harley
harley el 27 de Ag. de 2013
Comentada: Tejas el 14 de Jul. de 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

Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 27 de Ag. de 2013
n=60;
m=1:n;
a=m(sort(randperm(60,15)));
b=diff(a);
b(end+1)=60-sum(b)
sum(b)
  13 comentarios
Bruno Luong
Bruno Luong el 13 de Jul. de 2020
Editada: Bruno Luong el 13 de Jul. de 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
Tejas el 14 de Jul. de 2020
Integering the solution from Roger's function works very well for me. I do not require the numbers to be perfectly uniform. Thanks!

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 27 de Ag. de 2013

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by