確率統計確率統計
逆ガウス分布サンプリング; Inverse Gaussian Distribution Sampling

概要
逆ガウス分布とは以下の式で表現される確率分布。

$$ f(x)=\left( \frac{\lambda}{2 \pi x^3}\right)^{1/2} exp \left( - \frac{\lambda (x-\mu)^2}{2 \mu^2 x} \right) $$
逆ガウス分布

ソースコード

namespace ExRandom.Continuous {
    public class InverseGaussRandom : Random{
        readonly MT19937 mt;
        readonly NormalRandom nd;
        readonly double mu, lambda;

        public InverseGaussRandom(MT19937 mt, double lambda = 1, double mu = 1) {
            if(mt == null) {
                throw new ArgumentNullException();
            }

            if(!(mu > 0) || !(lambda > 0)) {
                throw new ArgumentException();
            }
            
            this.mt = mt;
            this.nd = new NormalRandom(mt);
            this.mu = mu;
            this.lambda = lambda;
        }

        public override double Next() {
            double x, y, z, w;

            x = nd.Next();
            y = x * x * mu;
            z = mt.NextDouble();
            w = mu - (0.5 * mu / lambda) * (Math.Sqrt(y * (y + 4.0 * lambda)) - y);

            return (z < (mu / (mu + w))) ? w : (mu * mu / w);
        }
    }
}

関連項目
メルセンヌ・ツイスタ
各種確率分布サンプリング基本クラス

ライブラリライブラリ
確率統計確率統計
線形代数線形代数
幾何学幾何学
最適化最適化
微分方程式微分方程式
画像処理画像処理
補間補間
機械学習機械学習
クラスタリングクラスタリング
パズルゲーム・パズル
未分類未分類