我想使用指数随机数生成器(平面风险函数)在 50 到 150 之间选择值。如何在matlab中实现内置指数随机数函数的界限?
问问题
2061 次
2 回答
2
一种快速的方法是生成比您需要的更长的序列,并丢弃超出您所需范围的值。
dist = exprnd(100,1,1000);
%# mean of 100 ---^ ^---^--- 1x1000 random numbers
dist(dist<50 | dist>150) = []; %# will be shorter than 1000
如果修剪后没有足够的值,您可以重复并附加到向量上,或者您想要这样做。
于 2012-09-10T20:34:03.813 回答
2
exprandn
使用rand
(请参阅>> open exprnd.m
),因此您可以通过反转过程并在所需范围内均匀采样来限制其输出[r1, r2]
。
sizeOut = [1, 1000]; % sample size
mu = 100; % parameter of exponential
r1 = 50; % lower bound
r2 = 150; % upper bound
r = exprndBounded(mu, sizeOut, r1, r2); % bounded output
function r = exprndBounded(mu, sizeOut, r1, r2);
minE = exp(-r1/mu);
maxE = exp(-r2/mu);
randBounded = minE + (maxE-minE).*rand(sizeOut);
r = -mu .* log(randBounded);
对于 20K 样本,绘制的密度(使用非参数内核估计器)如下所示
于 2012-09-10T20:38:51.807 回答