Generating random numbers from normal distribution

30 visualizaciones (últimos 30 días)
Ruby
Ruby el 25 de Jun. de 2013
Comentada: Pavan Karuturi el 18 de Abr. de 2023
Hello,
I generated random numbers from normal distribution for a parameter that has typical values within the range 0.0 to 0.4. The generated random numbers have both negative and positive values. How do I generate only positive values to fit the range of my parameter?
I have another concern:
I understand the random numbers generated from normal distribution in matlab actually come from standard normal distribution. Is there a way to generate from the normal distribution?
Thanks in advance
Best Regards
  2 comentarios
Walter Roberson
Walter Roberson el 25 de Jun. de 2013
Take abs() of your generated number, perhaps?
Pavan Karuturi
Pavan Karuturi el 18 de Abr. de 2023
How to Generate Gaussian Random Variable in MATLAB? Also plot its CDF and PDF.

Iniciar sesión para comentar.

Respuesta aceptada

Iain
Iain el 25 de Jun. de 2013
If you take a random number from a gaussian (aka normal) curve, you can calculate the probability that number would come up.
random = randn();
prob = icdf('Normal', random_value, 0, 1);
You can then, if you know the cdf, calculate the value that would give you that probabiltiy.
example: random_value_my_distribution = cdf('binomial',prob, trials, prob)

Más respuestas (5)

Leah
Leah el 25 de Jun. de 2013
Yes you can do this you just need the right transformation. You cannot generate a bounded normal distribution. It needs to be defined with the mean and standard deviation. So your mean would be 0.2, you just shift the distribution by this amount. If you want a bounded distribution try a triangular or uniform.
standard deviation =0.1 mean = 0.2
r = 0.2 + 0.1.*randn(100,1);

Shashank Prasanna
Shashank Prasanna el 25 de Jun. de 2013
Editada: Shashank Prasanna el 25 de Jun. de 2013
I'd like to clarify could of things.
"random numbers generated from normal distribution in matlab actually come from standard normal distribution"
This is true only if you use randn If you want to use uniform random numbers then you have to use rand
Non-standard normal random number can be generated as follows:
mean + sigma*randn();
Uniform random random numbers on a separate interval (not 0-1) between a and b can be generated as follows:
r = a + (b-a).*rand();
This way you can specify your own range and keep it positive if you like.

Ruby
Ruby el 27 de Jun. de 2013
Hi, Thank you all for the response. I found the answers from Lain and Shashank to be very applicable and I have been able to generate the random variables within the range I wanted. Once again, thanks for all help.

Mostafa Nakhaei
Mostafa Nakhaei el 18 de Nov. de 2019
The best answer is to simply not consider the side that produce negative results using if statement.
So, generate the whole numbers and then do not consider the left side!
Thanks
  1 comentario
Alireza Ahani
Alireza Ahani el 24 de Abr. de 2021
Editada: Alireza Ahani el 24 de Abr. de 2021
In that case, it is not normal distribtion, we would have an arbitrary PDF for distribution:

Iniciar sesión para comentar.


Alireza Ahani
Alireza Ahani el 24 de Abr. de 2021
If you want to nessecarily have a "normally (gaussian/bell-shaped) pdf" for generation of the random number, you can use this code:
YLIM = [0.0 0.4];
N=100; % number of random vars
n=3.2; % parameter for adjusting sigma
mu=0.2; % mean
sigma = (YLIM(2)-mu)/n;
x=-5:0.001:5;
y = normpdf(x,mu,sigma);
figure; plot(x,y); ylabel('%'); title('pdf'); xlim(YLIM);
text(YLIM(1),0.9*max(ylim),['probability to be outside of desired limit=' num2str(100*(1-erf(n/sqrt(2)))) '%'])
RndN = mu + randn(N,1).*sigma;
figure; plot(RndN);
you can adjust "n" to have a control over probability of overpassing the limits [0.0 0.4], it is based on this reference:

Community Treasure Hunt

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

Start Hunting!

Translated by