#matlab #plot #random #histogram #octave
#matlab #график #Случайный #гистограмма #октава
Вопрос:
Давайте определим X как :
и объекты, связанные с ним:
Я хочу вычислить значение следующей функции и отобразить его на том же графике с собственными значениями Y.
Моя работа до сих пор
# Define dimensions of X
N=700;
T=900;
lambda=N/T;
# Randomize X
x=randn(N,T);
# Estimate standard deviation
s=std(x(:));
# Now we estimate y and it's eigenvalues
y=x*x'/T;
l=eig(y);
# Calculating lambda_plus and lambda_minus
lambda_plus=(s^2)*(1 sqrt(lambda))^2;
lambda_minus=(s^2)*(1-sqrt(lambda))^2;
x_lim = linspace(0.1, 3, 10^3)
# Taking into account indicator function
if (x_lim <= lambda_plus amp;amp; x_lim>= lambda_minus);
smth=(1./(2*pi*lambda*x_lim*s^(2))).*sqrt((lambda_plus-x_lim).*(x_lim-lambda_minus));
else
smth = 0
endif
# Normalize histogram
[f, p] = hist(l, nbins = 20)
hold on;
bar(p, f / sum(f));
plot(x_lim, smth)
Проблема, с которой я сталкиваюсь с этой функцией, заключается в том, что результат выглядит следующим образом:
что выглядит не совсем так, как должно. Согласно википедии, эти два графика должны сходиться гораздо значительнее. Я нашел где-то в Интернете очень похожие графики, и они выглядят так:
Мой вопрос: что я делаю не так? Я выбрал неправильный масштаб? Как я вижу на втором графике, функция принимает гораздо меньше значений, чем моя, но я понятия не имею, что не так с ее вычислением. Не могли бы вы помочь мне рассказать, что я сделал неправильно?
Ответ №1:
Да, это проблема масштаба. Вы нормализуете гистограмму как
bar(p, f / sum(f));
который выдает единичную сумму всех высот столбцов. Вместо этого вы должны использовать
bar(p, f / sum(f) / (p(2)-p(1)));
для получения единичной площади.