確率統計確率統計
ウィグナー半円分布サンプリング; Wigner Semicircle Distribution Sampling

概要
ウィグナー半円分布とは以下の式で表現される確率分布。確率密度関数は半円の名の通りの形状をしている。

$$f(x)=\frac{2}{\pi s^2} \sqrt{s^2-x^2}, \quad |x| \leq s $$
ウィグナー半円分布

ウィグナー半円分布に従う確率変数の生成にはJohn von Neumannの棄却法を用いる。採択率は\(\pi/4\)なので逆関数法を使わずとも十分高速になる。

ソースコード

namespace ExRandom.Continuous {
    public class WignerSemicircleRandom : Random {
        readonly MT19937 mt;
        readonly UniformRandom ud;
        readonly double s;

        public WignerSemicircleRandom(MT19937 mt, double s = 1) {
            if(mt == null) {
                throw new ArgumentNullException();
            }

            if(!(s > 0)) {
                throw new ArgumentException();
            }

            this.mt = mt;
            this.ud = new UniformRandom(mt, -1, 1);
            this.s = s;
        }

        public override double Next() {
            double r, thr;

            do {
                r = ud.Next();
                thr = Math.Sqrt(1 - r * r);
            } while(!mt.NextBool(thr));

            return r * s;
        }
    }
}

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


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