2015-10-12 33 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很高興它的工作。我修復了最小/最大錯誤。 –