特定发行版的pdf

时间:2011-08-29 01:58:02

标签: matlab statistics probability

我是Matlab的新手。我想用Matlab检查所谓的“对数定律”,以确定随机矩阵,但仍然不知道如何。

对数定律:

设A是一个随机伯努利矩阵(条目是iid,取值+ -1,大概为1/2),大小为n乘n。我们可能想要将(log(det(A ^ 2)) - log(factorial(n-1)))/ sqrt(2n)的概率密度函数与高斯分布的pdf进行比较。对数定律表明,当n接近无穷大时,第一个的pdf将接近第二个的pdf。

我的Matlab任务非常简单:检查比较,比如说n = 100。谁知道怎么做?

感谢。

1 个答案:

答案 0 :(得分: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分解)