Johnson's SB分布サンプリング; Johnson's SB Distribution Sampling
概要
Johnson's SB分布とは以下の式で表現される確率分布。
$$f(x)=\frac{\delta}{\lambda \sqrt{2 \pi} z (1-z)} exp \left( -\frac{1}{2} \left(\gamma + \delta \log \frac{z}{1-z} \right)^2 \right), \quad z \equiv \frac{x-\eta}{\lambda} ,\quad \eta \leq x \leq \eta+\lambda $$
ソースコード
namespace ExRandom.Continuous {
public class JohnsonsSBRandom : Random{
readonly MT19937 mt;
readonly double delta, lambda, gamma, eta;
public JohnsonsSBRandom(MT19937 mt, double delta = 1, double lambda = 1, double gamma = 0, double eta = 0) {
if(mt == null) {
throw new ArgumentNullException();
}
if(!(delta > 0) || !(lambda > 0) || Double.IsNaN(gamma) || Double.IsNaN(eta)) {
throw new ArgumentException();
}
this.mt = mt;
this.delta = delta;
this.lambda = lambda;
this.gamma = gamma;
this.eta = eta;
}
public override double Next() {
double u = mt.NextDouble_OpenInterval01(), inv_erf_u = ErrorFuntion.Probit(u);
double x = Math.Exp((inv_erf_u - gamma) / delta);
return lambda * x / (1 + x) + eta;
}
}
}
関連項目
メルセンヌ・ツイスタ
各種確率分布サンプリング基本クラス
誤差関数