在matlab中生成随机离散分布的简洁方法

时间:2014-07-03 01:33:54

标签: matlab probability probability-density

通常,我需要在matlab中生成任意离散分布。我可以这样写:

randDiscreteDistribution = rand(sizeOfDistribution, 1);
randDiscreteDistribution = randDiscreteDistribution / sum(randDiscreteDistribution);

虽然我想避免在任何地方写这两行,但封装这个功能会使软件变得更清晰。我想避免为源代码控制原因编写完整的函数,我需要在多个repos中使用它,它肯定不值得自己的子模块!

理想情况下,我想要一个匿名函数的解决方案(本地函数已经输出,因为它们不允许在脚本中使用),尽管我每次需要它时都会使用这两条丑陋的行而不是黑客在一些表现较慢的东西周围: (http://www.mathworks.com/matlabcentral/answers/50195-is-it-possible-to-write-several-statements-into-an-anonymous-function)。

1 个答案:

答案 0 :(得分:0)

您可以通过这种方式将其缩小到一行:

randDiscreteDistribution  = diff([0; sort(rand(sizeOfDistribution-1, 1)); 1]);

不是通过除法归一化为1,而是在单位间隔中取sizeOfDistribution-1个点,然后使用获得的子间隔的长度作为分布值。这些长度会自动标准化。

使用此方法,获得的randDiscreteDistribution值的分布与原始代码中的分布不同。但也许这没关系? (使用您的代码,randDiscreteDistribution值无论如何都不一致。)