Gaussian distributed random numbers
Show older comments
I need to generate a stationary random numbers with gaussian distribution of zero mean and a variance of unity with max value one.
1 Comment
John D'Errico
on 11 Jul 2014
As all the people have pointed out, there are questions that you must answer before you really get a valid response.
Is the mean to be zero and the variance 1 AFTER truncation or before?
Accepted Answer
More Answers (2)
Ben11
on 11 Jul 2014
What if you generate some random numbers (here 100) with normal distribution, mean of 0 and std dev of 1:
R = normrnd(0,1,1,100);
then divide all by the highest value so that the maximum is 1:
R_norm = R./max(R(:));
Check max:
max(R_norm(:))
ans =
1
Well a simple Gaussian distribution code can be as follows:
function main()
xo = 0;
yo = 0;
xsigma = 0.01;
ysigma = 0.01;
particle_amount = 100;
xpoints = Gauss(xo,xsigma,particle_amount)
ypoints = Gauss(yo,ysigma,particle_amount)
%needs column vectors
coordinates_x_y = [xpoints ypoints];
function output = Gauss(xo,sigma,PA)
r = sqrt(-2.0.*(sigma^2).*log(rand(PA,1)));
phi = 2.0.*pi.*rand(PA,1);
output = xo+r.*cos(phi);
This produces as many random Gaussian distribution about the center of (x,y)=(0,0) and a sigma of 0.01 with 100 points of data. You can modify where needed. I hope that helps you out!
3 Comments
John D'Errico
on 11 Jul 2014
So randn is not sufficient for you? Note that this does not help, as the request was for a truncated Gaussian.
Jon Thornburg
on 22 Jun 2020
This thead is a few years old but I was looking over the example, because I need to do something similar. I was trying the above code. Gauss(xo,xsigma,particle_amount) it pops out the error "Undefined function or variable 'Gauss'."
Gauss was not deifed as a variable and searching matlab documentation cannot find "Gauss" by itself as formated in the above script. Any suggestions?
Ruben Dörfel
on 13 Oct 2020
@Jon Thornburg
Gauss seems to be a user defined function. You would have to put
function output = Gauss(xo,sigma,PA)
r = sqrt(-2.0.*(sigma^2).*log(rand(PA,1)));
phi = 2.0.*pi.*rand(PA,1);
output = xo+r.*cos(phi);
into a new script. You should look up how to implement functions in matlab.
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!