MatLab:生成具有泊松分布的N个伪随机数,其平均值为M,总值为T,其中N、M和T由用户定义

MatLab:生成具有泊松分布的N个伪随机数,其平均值为M,总值为T,其中N、M和T由用户定义,matlab,random,poisson,Matlab,Random,Poisson,我希望能够在MatLab中生成一个由N个伪随机数组成的序列,其泊松分布的平均值为M。N个数的和应为T。N、M和T始终为正或零,并且将是任何函数的用户指定参数 显然,如果T相对于N很小,则很可能会出现问题,无法获得总T。在这种情况下,函数可能只返回值T,然后返回N-1零或错误代码。然而,在大多数情况下,很可能是T>>N 我一直在尝试基于生成具有给定分布的随机数的方法的变体,并在每个步骤尝试各种规格化,但都没有成功。您可以尝试使用 如果你使用维基百科符号,那么k=N,N=T,pi=M/T。泊松分布具

我希望能够在MatLab中生成一个由N个伪随机数组成的序列,其泊松分布的平均值为M。N个数的和应为T。N、M和T始终为正或零,并且将是任何函数的用户指定参数

显然,如果T相对于N很小,则很可能会出现问题,无法获得总T。在这种情况下,函数可能只返回值T,然后返回N-1零或错误代码。然而,在大多数情况下,很可能是T>>N


我一直在尝试基于生成具有给定分布的随机数的方法的变体,并在每个步骤尝试各种规格化,但都没有成功。

您可以尝试使用

如果你使用维基百科符号,那么k=N,N=T,pi=M/T。泊松分布具有显著的平均值等于方差的特性,但如果你的参数是pi很小,那么平均npi将非常接近方差npi1 pi。根据T的多项式等式的性质,求和将自动进行

Matlab中的多项式采样是使用

更新

WRT注释,让我们考虑n个采样值vi,并写出它们的总数

Sumi=1…nvi=T

让我们来计算这个等式左右两侧的平均值

Sumi=1…N Evi=ET=T

在右边,常数的平均值本身就是常数。在左边我们有

Sumi=1…N Evi=Sumi=1…N M=N*M=T


因此,M=T/N和pi=M/T=1/N.

我认为不可能有规定总和的独立泊松变量。甚至可能不是相依的,因为泊松随机变量可以任意大。篡改总数会破坏分配OK,我明白你的意思。如果伪随机数的值有界在平均值的6个标准偏差范围内,也许有一种解决方法。从高斯近似法得出的6{\sigma}值。显然,函数外部的某个地方可能需要检查T是否可以在该条件下达到。这看起来很有希望,但是,对不起,我今天有点傻,我不明白在MatLab中,如果所有pi的和必须等于1,pi如何可以等于所有I的常数m/T。在MatLab中测试该函数表明,这可能是1/N的输入错误-正确吗?@AlfredPennyworth。是一样的,请检查一下update@AlfredPennyworth这也意味着,给定T和N,M不能被理解。这证实了我对最初问题的担忧。我将使用你解释过的多项式分布方法。非常感谢。@AlfredPennyworth不客气。请记住,有相当多的离散分布具有样本和等于固定值的性质。例如,它比多项式更复杂,可以说参数更多,泊松更少,但如果多项式不适用于你,肯定会有替代方案