PDF конкретного дистрибутива - PullRequest
4 голосов
/ 29 августа 2011

Я новичок в Matlab. Я хотел бы проверить так называемый «логарифмический закон» для определителя случайных матриц с Matlab, но до сих пор не знаю, как.

Логарифмический закон:

Пусть A - случайная матрица Бернулли (элементы iid, принимающие значение + -1 с вероятностью 1/2) размера n на n. Мы можем захотеть сравнить функцию плотности вероятности (log (det (A ^ 2)) - log (factorial (n-1))) / sqrt (2n) с pdf распределения Гаусса. Логарифмический закон гласит, что pdf первого будет приближаться к pdf второго, когда n приближается к бесконечности.

Моя задача Matlab очень проста: проверьте сравнение, скажем, n = 100. Кто-нибудь знает, как это сделать?

Спасибо.

1 Ответ

5 голосов
/ 29 августа 2011

Рассмотрим следующий эксперимент:

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, которое имеет аналогичную реализацию (с использованием LU или разложения Холецкого)

...