Create a random array with certain requirements

1 visualización (últimos 30 días)
luca
luca el 21 de Abr. de 2020
Editada: Muthu el 21 de Abr. de 2020
Hi,
I would like to create an array V that contains random elements (numbers) with the following characteristic:
1) The array should have lenght equal to X
2) The avarage value of the elements inside the array should be Y
3) The elements should stay inside an interval T= [A to B]
4) The elements should not necessary be integer, could also be decimal till up to the fourth decimal place.
Let's consider the following example:
GIven as inputs: X= 10 , Y=19.9948 , T= [0 to 50]
I would like to obtain a random array like
V = [1 5.5674 28.9764 18 30.8433 35.3389 4.6333 10 16 49.5887]
Thanks for your help
  1 comentario
luca
luca el 21 de Abr. de 2020
With something like that I Create a vector of 10 random values drawn from a normal distribution with a mean of 15 and a standard deviation of 20.But some values are out of the range [0 50]. As it possible to see from y.
a = 20;
b = 15;
y = a.*randn(10,1) + b;
Do you know how I can change the code, so that it works?

Iniciar sesión para comentar.

Respuestas (1)

Muthu
Muthu el 21 de Abr. de 2020
Editada: Muthu el 21 de Abr. de 2020
Hello Luca,
I have tried to draft a program which does just the requested function.
You can still expand and fine tune this program with more condtions.
function res_array = random_array(x, y, interval)
temp_array = rand(1,x) * interval(2);
temp_mean = mean(temp_array);
add_to_sum = x * (y-temp_mean);
add_in_each_term = add_to_sum / x ;
res_array = temp_array + add_in_each_term ;
end
result = random_array(10,19.9948,[0,50])
result =
37.1853 7.8636 35.8637 7.3257 41.6126 12.6486 4.9792 7.7036 25.9517 18.8139
  4 comentarios
luca
luca el 21 de Abr. de 2020
I suppose n is equal to X. In any case, with this code sometimes I obtain something negative like this:
Columns 1 through 8
30.4070 2.6201 27.5111 2.3479 11.5966 24.4533 32.1837 -2.7714
Columns 9 through 10
39.6417 31.9580
Do you know how to solve this problem?
Muthu
Muthu el 21 de Abr. de 2020
n is X, its a mistake.
The negative value is because of the subtraction from Y:
add_to_sum = x * (y-temp_mean);
add_in_each_term = add_to_sum / x ;
res_array = temp_array + add_in_each_term ;
when temp_mean is more than Y, we get negative value to add to sum.
hence that in turn is subtracted from all terms in res_array. When the random number generated is less than the value subtracted, we get negative i suppose.
It is a very good point to start adding conditions further in the function to get the proper result array.

Iniciar sesión para comentar.

Categorías

Más información sobre Programming en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by