0

我想使用指数随机数生成器(平面风险函数)在 50 到 150 之间选择值。如何在matlab中实现内置指数随机数函数的界限?

4

2 回答 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 回答