How do I generate numbers from an Exponential Distribution within Min and Max values?

4 次查看(过去 30 天)
How to generate random numbers with the exponential distribution applied, and also given a minimum value of 0.5, and a maximum value of 4.3, the mean is 1.5?
How do I add the maximum to the following?
pd = makedist('Exponential','mu', 1.5);
r=0;
while r<0.5
r=random(pd);
end

采纳的回答

Star Strider
Star Strider 2023-7-11
Use the truncate function —
pd = makedist('Exponential','mu', 1.5);
t = truncate(pd, 0.5, 4.3);
r = random(t,10000,1);
figure
histogram(r,100)
.
  2 个评论
John D'Errico
John D'Errico 2023-7-11
编辑:John D'Errico 2023-7-11
+1. Truncate is the correct solution, of course. It will sometimes be vastly more efficient compared to rejection schemes too, since random does not need to throw away a significant fraction of the generated samples.

请先登录,再进行评论。

更多回答(2 个)

Vishnu
Vishnu 2023-7-11
Hi Sean Sarran,
Simply insert a "or" statement in the while loop condition itself to apply a maximum value of 4.3.
Consequently, this is the whole code:
pd = makedist('Exponential', 'mu', 1.5);
r = 0;
while r < 0.5 || r > 4.3
r = random(pd);
end

Torsten
Torsten 2023-7-11
pd = makedist('Exponential','mu', 1.5);
n = 100;
lb = 0.5;
ub = 4.3;
rv = zeros(n,1);
i = 0;
while i < n
r = random(pd);
if r >= lb & r <= ub
i = i+1;
rv(i) = r;
end
end
rv
rv = 100×1
3.7779 1.5435 0.8186 2.5542 3.0388 2.1058 1.9611 1.3722 0.9059 3.2783

Community Treasure Hunt

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

Start Hunting!

Translated by