在不使用mnrnd

时间:2015-11-12 21:45:35

标签: matlab

我知道随机变量x的每个i = 1,2,...,100的P(x = i)。那么我如何根据Matlab中给定的P(x = i)以多项分布对x进行采样?

我可以使用Matlab内置命令randrandi,但不能使用mnrnd

1 个答案:

答案 0 :(得分:1)

通常,您可以使用统一随机数生成器和X的逆累积分布函数从任何1维概率分布X中对数字进行采样。这称为inverse transform sampling

random_x = xcdf_inverse(rand())

这是如何适用的?如果您有定义多项分布的概率pF = cumsum(p)会为您提供定义CDF的向量。然后,您可以使用temp = rand()在[0,1]上生成统一的随机数,然后在F中找到大于temp的第一行。这基本上是使用多项分布的逆CDF。

请注意,对于某些分布(例如伽玛分布),这是一种生成随机抽取的低效方法,因为评估逆CDF是如此之慢(如果CDF无法通过分析表达,则较慢的数值方法必须是使用)。