指数乱数ジェネレーター (フラット ハザード関数) を使用して、たとえば 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 に答える