Мне нужно распределение Пуассона.
В настоящее время у меня есть следующий код:
public static int getPoisson(double lambda) {
double l = Math.exp(-lambda);
double p = 1.0;
int k = 0;
do {
k++;
p *= Math.random();
} while (p > l);
return k - 1;
}
Мне было интересно, как я могу изменить его так, чтобы я мог генерировать x значений в пределах определенного диапазона, то есть, если a = 5, b = 10 и lambda = 6, все сгенерированные значения будут находиться в диапазоне от 5 до 10 .
Примечание. Я мог бы перегрузить метод и, таким образом, принять параметры диапазона и вызвать метод getPossion внутри цикла; отбрасывая все, что не соответствует этому диапазону. Однако я хотел бы проверить, существуют ли математически определенные средства для достижения этого и/или подходит ли этот подход.
РЕДАКТИРОВАТЬ: средства, с помощью которых я отбрасываю значения «вне границ»:
public static int getPoisson(final double min, final double max, final double lambda) {
int k = 0;
do {
k = getPoisson(lambda);
} while (k < min || k > max);
return k;
}