Давайте для начала решим, что мы выберем числа из [0,1], потому что это упрощает задачу.
n - это число, представляющее распределение (0,2321 или -2321), как в примере
Нам нужно решениетолько для n> 0, потому что если n <0. Вы можете взять положительную версию n и вычесть из 1. </p>
Одна простая идея для PDF в интервале [0,1] равна x^ п.(или, по крайней мере, такой формы)
Вычисление CDF затем интегрирует x ^ n и составляет x ^ (n + 1) / (n + 1)
Поскольку CDF должен быть 1 приконец (в нашем случае в 1) наш конечный CDF равен x ^ (n + 1) и правильно взвешен. Чтобы сгенерировать распределение этого вида, мы должны вычислить квантильную функцию
Функция квантиля просто обратна CDF и в нашем случае.x ^ (1 / (n + 1))
И это все.Ваш QF равен x ^ (1 / (n + 1))
Чтобы сгенерировать числа из [0,1], вы должны выбрать равномерно распределенный случайный случай из [0,1] (наиболее распространенная случайная функция в языках программирования)
и чем питается эта ничуть (1 / (n + 1))
Единственная проблема, которую я вижу, состоит в том, что может быть проблемой вычислить 1-x ^ (1 / (- n + 1))правильно, где n <0, но я думаю, что вы можете использовать log1p, поэтому он становится exp (log1p (-x ^ (1 / (- n + 1))), если n <0 </p>
вывод с нормализацией
if n>=0: (x^(1/(n/1000+1)))*1000
if n<0: exp(log1p(-(x^(1/(-(n/1000)+1)))))*1000
where x is uniformly distributed random value in interval [0,1]