2015-10-12 35 views
0

我已经写了下面的脚本,它应该创建一个数组,其中包含从1到N中的每个数字的概率质量,这是在稳健孤子分布之后定义的。 delta,N和M的值完全是任意的。如何生成其值根据输入数组分布的分布?

N = 300; % length of the the array 
in = [1:1:N]; % index array 

delta = 0.5; 
M = 70; 
R = N/M; 

t(1:M-1) = 1./(in(1:M-1)*M); 
t(M) = log(R/delta)/M; 
t(M+1:N) = 0; 

我想要做的现在,T是使用数组为了以某种方式“产生”的PDF与数组中所包含的概率返回的数字数组t。我已经查阅了手册,发现了makedist函数,但是我没有找到一个允许我将两个输入数组用作参数的选项。我不知道在哪里看。

生成的数字应该用于使用LT代码编码数据包(为了教学目的,我只是想了解如何构建它们)。

回答

1

这听起来像你希望能够随机选取数字1:N的元素,概率与值t(i)成正比。首先,让我们将非标准化概率重组为一个数组,列出每个值的范围;即 t-> 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 1和p如上:

r-p = {0.07, 0.06, 0.02, -0.02, etc} 
find(r-p>0) = {1,2,3} 
+0

去除''''循环前面的'{}'括号以及'()'。这是无效的MATLAB语法。 – rayryeng

+0

感谢您的答案,它现在的作品,但我不得不将min功能更改为最大功能,否则结果总是为1. – ThCP

+0

@ThCP很高兴它的工作。我修复了最小/最大错误。 –