レシプロカル分布サンプリング; Reciprocal Distribution Sampling
概要
レシプロカル分布とは以下の式で表現される確率分布。
$$f(x)=\frac{1}{x (log(b)-log(a))}, \quad 0 \lt a \lt b, a \leq x \leq b $$
ソースコード
namespace ExRandom.Continuous {
public class ReciprocalRandom : Random{
readonly MT19937 mt;
readonly double a, b;
public ReciprocalRandom(MT19937 mt, double a = 1, double b = 2) {
if(mt == null) {
throw new ArgumentNullException();
}
if(!(a > 0) || !(b > 0)) {
throw new ArgumentException();
}
this.mt = mt;
this.a = a;
this.b = b;
}
public override double Next() {
double u = mt.NextDouble();
return Math.Pow(a, u) * Math.Pow(b, 1 - u);
}
}
}
関連項目
メルセンヌ・ツイスタ
各種確率分布サンプリング基本クラス