双曲線正割分布サンプリング; Hyperbolic Secant Distribution Sampling
概要
双曲線正割分布とは以下の式で表現される確率分布。
$$f(x)=\frac{1}{2} sech \left( \frac{\pi x}{2} \right) $$
ソースコード
namespace ExRandom.Continuous {
public class HyperbolicSecantRandom : Random{
readonly MT19937 mt;
public HyperbolicSecantRandom(MT19937 mt) {
if(mt == null) {
throw new ArgumentNullException();
}
this.mt = mt;
}
public override double Next() {
const double PI_DIV_2 = Math.PI * 0.5, INV_PI_DIV_2 = 2.0 / Math.PI;
double r = mt.NextDouble_OpenInterval01();
return INV_PI_DIV_2 * Math.Log(Math.Tan(PI_DIV_2 * r));
}
}
}
関連項目
メルセンヌ・ツイスタ
各種確率分布サンプリング基本クラス