freematで指数分布と逆関数法による指数分布に基づく乱数生成

研究で逆関数法が必要になったので,freematを利用して
指数分布に基づく乱数生成を行います.

まず,指数分布は
y = a * exp^(-a*x)ですね.


lambda = 1/10;
x = [0:0.05:100];
y = lambda * exp(-lambda * x);
plot (x, y, 'b');
grid on;



この分布に基づいて乱数生成を行います.

d = [1:100];
array = zeros(1,100);

%10000個の乱数生成
for i=1:10000;
%引数を0~1の一様乱数rand(1)とする
s = -(1/lambda)*log(1-rand(1));
for j=1:100;
%生成した値を粒度を1とするヒストグラム化
if j <= s && s < j+1
array(j) = array(j)+1;
end
end
end

plot (d,array,'g');
grid on


逆関数法便利!
※本来0~∞だが,100で打ち切りにしています.