nishiru3の日記

備忘録です。ネットのゴミ。

逆関数法による指数分布に従う乱数生成

指数分布

指数分布の密度関数は次のとおりである。

f(x) = \lambda e^{-\lambda x}
\lambda >0, x>0

逆関数法による指数分布に従う乱数生成

#/usr/bin/env perl
use strict;
use warnings;
# 逆関数法による指数分布の生成
sub dexp {
    my $lambda = shift;
    my @x = @_;
    my @y;
    for my $xx (@x) {
        print "$xx"."\n";
        push @y, -log($xx) / $lambda;
    }
    return \@y;
}
# 連続一様分布の配列作成
my @x;
for my $i (1..100) {
    push @x, rand(1);
}
# 指数分布に従う乱数の生成
my $y = dexp(0.1,@x);
# 出力
for my $i (@$y) {
    print "$i"."\n";
}