我希望能够在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提供给定分布的随机数的方法进行变化,并在每一步尝试各种标准化但尚未成功。
您可以尝试使用multinomial distribution来估算您想要的内容。
如果你使用维基百科表示法,那么k=N
,n=T
和pi = M / T.泊松分布具有均值等于方差的特性,但如果你的参数是pi小的那么,那么平均npi将非常接近方差npi(1-pi)。总和将自动(通过多项式的属性)等于T.
Matlab中的多项式采样使用mnrmd function完成。
UPDATE
Wrt评论,让我们考虑N
采样值vi,并写出它们的总和
总和(i = 1 ... N)vi = T.
让我们计算这个等式左右两侧的平均值。
Am(u = 1 ... H)E(vi)= E(T)= T.
在右侧,常数的平均值本身是恒定的。在左侧,我们有
Sum(i = 1 ... N)E(vi)= Sum(i = 1 ... N)M = N * M = T.
因此,M = T / N且pi = M / T = 1 / N.