Random number generate in an interval

3 views (last 30 days)
Hi community,
I would like to generate random number in the follow distribuition: Normal, Gamma and Weibull.
Amount of data required: 5000 numbers at interval [a,b]
At the example, it was used the follow code:
A = linspace(0,1,5000)
sr = size(A)
b = normrnd(27.5,15.73,sr)
plot(b)
Its works, however, the valid interval to generate was [1,54]
Can us help me, please?
Yours faithfully
  7 Comments
Walter Roberson
Walter Roberson on 14 Sep 2023
Right, different interpretations of what "clipping" means in the context.
format long g
b = normrnd(27.5,15.73,[1 500000]);
out_of_range = (b < 1) | (b > 54);
mean(out_of_range) * 100
ans =
9.195
so over 9% of the samples are outside of the target range

Sign in to comment.

Answers (2)

the cyclist
the cyclist on 14 Sep 2023
Edited: the cyclist on 14 Sep 2023
A normal distribution, by definition, has support from negative infinity to positive infinity. You cannot have both a normal distribution and a finite range.
You can use the truncate function to create a truncated normal distribution object, and draw values from that. (See the second example on that page.) Is that what you want?

Bruno Luong
Bruno Luong on 14 Sep 2023
Edited: Bruno Luong on 15 Sep 2023
This doesn't need stat toolbox.
sigma = 15.73;
mu = 27.5;
interval = [1 54];
n = [1, 5000000];
X = TruncatedGaussian(-sigma,interval-mu,n) + mu;
histogram(X)

Community Treasure Hunt

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

Start Hunting!