График гистограммы выдает меньшие значения, чем ожидалось

#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)));
 

для получения единичной площади.