C#: Числовой алгоритм для генерации чисел от Биномиального распределения

Примером, который Вы даете, является на самом деле Python встроенная функция, вызванная divmod. Таким образом, кто-то, в какой-то момент вовремя, думал, что это был pythonic достаточно для включения в базовую функциональность.

мне, если это делает инструмент для очистки кода, это - pythonic. Сравните эти два блока кода:

seconds = 1234
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)

seconds = 1234
minutes = seconds / 60
seconds = seconds % 60
hours = minutes / 60
minutes = minutes % 60
8
задан KalEl 13 November 2009 в 12:17
поделиться

3 ответа

Если вы готовы платить, посмотрите на NMath от Centerspace.

В противном случае, код C, используемый программой Stats R, здесь , и его можно легко перенести на C #.

РЕДАКТИРОВАТЬ: Подробности ( inc.) о создании метода для этого на стр. 178 Практические численные методы с C # Джека Сюя.

ДРУГОЕ ИЗМЕНЕНИЕ:

4
ответ дан 5 December 2019 в 14:03
поделиться

Нет очевидного способа сделать это эффективно. Для малых n вы можете просто использовать формулу для вычисления обратной PDF. Для больших n вам, вероятно, лучше всего использовать одно из приближений к другим распределениям , которые легче вычислить.

3
ответ дан 5 December 2019 в 14:03
поделиться

Другой вариант - взять образец из Нормального или Пуассоновского, как вы, и затем добавить шаг Метрополис-Гастингс , чтобы принять или отклонить ваш образец. Если вы соглашаетесь, что все готово, если вы отказываетесь, вам придется снова полностью пересэмплировать. Я предполагаю, что поскольку приближение настолько близко, вы почти всегда получите шаг принятия, время от времени вы можете отклонить.

Также Книга Люка Девроя содержит несколько отличных алгоритмов для биномиальной выборки. 1250] PS Если получится хороший алгоритм; не могли бы вы поделиться им на Math.Net Numerics ?

5
ответ дан 5 December 2019 в 14:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: