Finding random normally distributed number above zero

조회 수: 2 (최근 30일)
Tishan Anantharajah
Tishan Anantharajah 2023년 4월 15일
댓글: Paul 2023년 4월 15일
I am currently using randn to produce a normally distributed number however would like to only take the positive side for the normally distributed curve. How could this be done? Would I have to use a loop?

답변 (3개)

Torsten
Torsten 2023년 4월 15일
편집: Torsten 2023년 4월 15일
Maybe taking abs(randn()) will give you something useful. It's the folded normal distribution (which in this case equals the truncated normal distribution):
n = 100000;
y = abs(randn(n,1));
hold on
histogram(y,'Normalization','pdf')
fun = @(x)sqrt(2/pi)*exp(-x.^2/2);
x = 0:0.01:4;
plot(x,fun(x))
hold off
  댓글 수: 2
Tishan Anantharajah
Tishan Anantharajah 2023년 4월 15일
Thank you it works
Paul
Paul 2023년 4월 15일
Can also use the HalfNormalDistribution if it's needed to do more than just generate random numbers.
n = 100000;
y = abs(randn(n,1));
hold on
histogram(y,'Normalization','pdf')
x = 0:0.01:4;
plot(x,pdf('HalfNormal',x,0,1))
hold off

댓글을 달려면 로그인하십시오.


Star Strider
Star Strider 2023년 4월 15일
The truncate function is another option.

Image Analyst
Image Analyst 2023년 4월 15일
You could just throw away any less than zero:
r = stDev * randn(100000, 1) + desiredMeanValue;
r(r<=0) = [];
% Or equivalently
r = r(r > 0);
To learn other fundamental concepts, invest 2 hours of your time here:

Community Treasure Hunt

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

Start Hunting!

Translated by