Я должен генерировать данные для распределения Пуассона. Мой диапазон составляет от 1000 до 100 К. Где n - количество элементов данных; k изменяется от 1 до n. В нем говорится использовать лямбда как n/2
Я никогда не брал статистику и понятия не имею, как получить правильную кривую здесь. Я могу накормить его лямбдой как n/2, но меняет K от 0-n? Я попробовал это (передавая k в качестве параметра), и когда я рисую данные, они растут, а не хвост рыбы. Что я делаю неправильно, или я делаю это правильно?
благодаря
У меня есть этот код в java от Кнута.
static double poissonRandomNumber(int lambda) {
double L = Math.exp(-lambda);
int k = 0;
double p = 1;
do {
k = k + 1;
double u = Math.random();
p = p * u;
} while (p > L);
return k - 1;
}
Одной из проблем, с которыми вы сталкиваетесь, является основное ограничение того, как компьютеры представляют и выполняют вычисления с числами с плавающей запятой.
Действительное число представлено на компьютере в форме, подобной научной нотации:
Значительные цифры × base ^ exponent
Для чисел с двойной точностью используется 11 бит, используемых для показателя, и 52 для части "значимых цифр". Поскольку числа с плавающей запятой нормированы, первое положительное число с плавающей запятой> 0.0 имеет значение около 10 ^ -320 (это определено как Double.MIN_VALUE в Java). См. IEEE Standard 754 Floating Point Numbers для хорошей записи по этому вопросу.
Рассмотрим строку кода:
double L = Math.exp(-lambda);
При лямбда 1000, e ^ -1000 (около 10 ^ -435) меньше Double.MIN_VALUE, и нет никакого способа, чтобы компьютер мог представлять e ^ -1000 любым другим, чем он может представлять e ^ -1000 00
Вы можете решить эту проблему, заметив, что лямбда является "скоростью прибытия", и вы можете рассчитать случайные выборки для более коротких интервалов и суммировать их. То есть
x = p(L);
может быть вычислено как
x = p(L/2) + p(L/2);
и более крупные цифры могут быть аппроксимированы:
x = 100 * p(L/100);
В статье Википедии о распределении Пуассона есть несколько хороших указателей на способы вычисления распределений Пуассона для больших значений лямбда.