2011-08-29 59 views
4

我是Matlab新手。我想用Matlab來檢查這種叫做「對數法則」的隨機矩陣的行列式,但仍然不知道如何。pdf特定分佈

對數法:

設A是一個隨機伯努利基質(條目是獨立同分布的,取值+ -1與概率1/2。)大小爲n的n個。我們可能希望比較(log(det(A^2)) - log(factorial(n-1)))/ sqrt(2n)的概率密度函數與高斯分佈的pdf。對數律說,當n接近無窮大時,第一個的pdf將接近第二個的pdf。

我的Matlab任務很簡單:檢查比較,比如n = 100。任何人都知道如何去做?

謝謝。

+0

[PDF](HTTP://www.mathworks。 com.au/help/toolbox/stats/pdf.html)在Matlab文檔中。 – darvids0n

+0

@HH:我在谷歌上搜索了「隨機決定因素的對數律」,發現[two](http://books.google.com/books?id=fsMamZXZwIsC&pg=PA60)[書籍參考](http ://books.google.com/books?id = LeGMfJwUK3cC&pg = PA47)..我認爲最後一個詞應該是:'sqrt(2 * log(n))' – Amro

回答

5

考慮以下實驗:

n = 100;       %# matrix size 
num = 1000;      %# number of matrices to generate 

detA2ln = zeros(num,1); 
for i=1:num 
    A = randi([0 1],[n n])*2 - 1; %# -1,+1 
    detA2ln(i) = log(det(A^2)); 
end 

%# `gammaln(n)` is more accurate than `log(factorial(n-1))` 
myPDF = (detA2ln - gammaln(n)) ./ sqrt(2*log(n)); 
normplot(myPDF) 

enter image description here

注意,對於大型矩陣,A * A的決定因素將是太大,無法在雙數來表示,並返回Inf。然而,我們只需要行列式的記錄,並且還有其他方法可以找到這個結果,以保持計算的對數尺度。

在評論,@yoda使用特徵值detA2(i) = real(sum(log(eig(A^2))));建議,我也發現上FEX一個submission具有相似的實現(使用LU或Cholesky分解)

+0

非常感謝,它適用於我。 (順便說一下,我的公式中有一個錯字,分母應該是sqrt(2 * log(n))。 –

+0

另外,是否有檢查更大尺寸的矩陣?我的Matlab適用於n = 100,但不適用n = 200,n = 1000呢?n = 100的比較似乎仍然不能令人信服 –

+1

@HH將'for'循環中的最後一行替換爲:'detA2(i)= real(sum (A^2))));'這樣會比較慢,但是可以讓它在與您的系統/ MATLAB允許的大小相同的矩陣上運行。 – abcd