MatLab: генерировать N псевдослучайных чисел с распределением Пуассона, имеющим среднее значение M и общее значение T, где N, M и T определяются пользователем - PullRequest
0 голосов
/ 07 марта 2019

Я хотел бы иметь возможность генерировать в MatLab последовательность N псевдослучайных чисел с пуассоновским распределением, имеющим среднее значение M . Сумма чисел N должна составлять T . N , M и T всегда положительны или равны нулю и будут заданными пользователем параметрами для любой функции.

Очевидно, что если T мало по сравнению с N , вполне вероятно, что будут проблемы с достижением общего значения T. В этом случае функция может просто вернуть значения T , а затем N -1 нулей или код ошибки. Однако весьма вероятно, что в большинстве случаев T >> N .

Я пробовал варианты, основанные на методе генерации случайных чисел с заданным распределением, предоставленным в http://matlabtricks.com/post-44/generate-random-numbers-with-a-given-distribution, и пробовал различные нормализации на каждом шаге, но безуспешно.

1 Ответ

1 голос
/ 07 марта 2019

Вы можете попытаться приблизиться к тому, что вы хотите, используя полиномиальное распределение .

Если вы используете нотацию Википедии, то k=N, n=T и p i = M / T. Распределение Пуассона обладает отличительным свойством среднего значения, равным дисперсии, но если ваши параметры таковы, что p i мало, то среднее значение np i будет довольно близко к дисперсии np i (1-р г * * 1016). Сумма будет автоматически (по свойству многочлена) равной T.

Полиномиальная выборка в Matlab выполняется с использованием функции mnrmd .

UPDATE

Комментарий, давайте рассмотрим N выборочных значений v i и запишем их сумму

Сумма (i = 1 ... N) v i = T

Позволяет вычислить среднее значение левой и правой части этого уравнения.

Сумма (i = 1 ... N) E (v i ) = E (T) = T

Справа среднее значение константы само является константой. С левой стороны у нас есть

Сумма (i = 1 ... N) E (v i ) = Сумма (i = 1 ... N) M = N * M = T

Следовательно, M = T / N и p i = M / T = 1 / N.

...