Matlab中自定义概率分布的仿真

时间:2013-09-28 12:35:07

标签: matlab

我正在尝试模拟以下分布:

 a   |  0   |  1   |  7   |  11  |  13 
-----------------------------------------
p(a) | 0.34 | 0.02 | 0.24 | 0.29 | 0.11

我已经模拟了一个类似的问题:四种球的机率分别为0.3,0.1,0.4和0.2。我创建了一个向量F = [0 0.3 0.4 0.8 1]并使用repmat将其增长1000行。然后我将它与使用相同repmat方法的5列增长的1000个随机数的列向量进行比较。我比较了这两个,计算了矩阵的求和器,并计算了得到频率的差值(例如[301 117 386 196])。 。

但是对于当前的分布,我不知道如何创建初始矩阵F以及我是否可以使用我之前使用的相同方法。

我需要答案为“矢量化”,所以没有(forwhileif)循环。

This question on math.stackexchange

1 个答案:

答案 0 :(得分:1)

如果您创建以下数组怎么办:

largeNumber = 1000000;
a=repmat( [0], 1, largeNumber*0.34 );
b=repmat( [1], 1, largeNumber*0.02 );
% ...
e=repmat( [13], 1, largeNumber*0.11 );

然后连接所有这些数组(获取一个数组,其中您的条目用相应的概率表示),将它们混合,并提取第一个N元素以获得N - 维从您的发行中抽取的矢量。

编辑:当然this回答是要走的路。