我编写了以下脚本,该脚本应该创建一个数组,其中包含从1到N的每个数字的概率质量,在强大的孤子分布之后定义。 delta,N和M的值完全是任意的。
{{1}}
我现在要做的是使用数组in和t以某种方式“生成”一个pdf,它返回数组 in 中的数字,其概率包含在数组 t 。我已经查看了手册,我找到了makedist函数,但是我没有找到一个允许我使用两个输入数组作为参数的选项。我真的不知道在哪里看。
生成的数字应该用于使用LT代码对数据包进行编码(出于教学目的,我只是想了解如何构建它们)。
答案 0 :(得分:1)
听起来你希望能够随机选择1:N元素的数字,其概率与值t(i)成比例。
首先,让我们将非标准化概率重组为一个列出每个值范围的数组;即 叔> p {0,0.01,0.05,0.09等}我刚才在这里使用了随机值。
然后我们可以做的是随机选择一个从0到1的数字,并找到与该随机数相关的i的值。即如果我们得到0.07,那么在我的例子中i的值将是3,因为0.07在0.05和0.09之间,而i = 3的值有4%被选中的概率;
s = sum(t);
p = double.empty(N,1);
for i = 1:N
if(i == 0)
p(i) = 0
else
p(i) = p(i-1) + t(i-1)/s;
end
end
现在每当我们需要分发号码时,我们都可以使用matlab的固有查找功能
r = rand()
i = max(find(r-p>0)) % this could probably be optimized
这是做什么的例子:如果我们使用与上面相同的r和p:
r-p = {0.07, 0.06, 0.02, -0.02, etc}
find(r-p>0) = {1,2,3}