我希望能够在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提供的具有给定分布的随机数生成方法的变体,并尝试在每个步骤进行各种归一化,但是都没有成功。
答案 0 :(得分:1)
您可以尝试使用multinomial distribution来估算所需的值。
如果使用维基百科符号,则'Close'
,k=N
和p i = M / T。泊松分布具有均值等于方差的独特属性,但是如果您的参数使得p i 很小,则均值np i 将非常接近方差np i (1-p i )。 (根据多项式的性质)总和将自动等于T。
在Matlab中使用mnrmd function完成多项采样。
更新
Wrt注释,让我们考虑n=T
个采样值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。