Разница в программировании Matlab для Gaussian

В моей домашней работе я должен изобразить, что метод может генерировать распределение Гаусса. программа Matlab показана ниже:

n=100;
b=25;
len=200000;

X=rand(n,len);    
x=sum(X-0.5)*b/n;

[ps2,t2]=hist(x,50);
ps2=ps2/len;

bar(t2,ps2,'y');
hold on;

sigma_2=b^2/(12*n);
R=normrnd(0,sqrt(sigma_2),1,len);

[ps2,t2]=hist(R,50);
ps2=ps2/len;
plot(t2,ps2,'bo-','linewidth',1.5);

x представляет собой сумму n равномерно распределенных переменных, умноженных на b/n. И x распределен по Гауссу с нулевым средним и sigma ^ 2 = b ^ 2/12n. Затем я получил изображение, где два распределения совпали. Однако, когда я подставил t2 внутрь функции плотности нормального распределения f(x)=exp(-x.^2/(2*sigma_2))/sqrt(2*pi*sigma_2), результат получился значительно больше, чем первый, хотя форма аналогична.

Я блуждаю, почему это происходит?


person Ayo Dollars    schedule 19.09.2015    source источник


Ответы (1)


Это потому, что вы не нормализовали дискретные гистограммы. Мы знаем, что в непрерывных распределениях интегралы вероятностных функций равны единице. Для решения этого вопроса необходимо разделить гистограмму на ее интеграл. Приближенный интеграл дискретной функции представляет собой прямоугольный интеграл:

integral (f) = sum(f)* LengthStep 

поэтому вы должны изменить свой код следующим образом:

n=100;
b=25;
len=200000;

X=rand(n,len);    
x=sum(X-0.5)*b/n;

[ps2,t2]=hist(x,50);
ps2=ps2/(sum(ps2)*(t2(2)-t2(1))); % normalize discrete distribution

bar(t2,ps2,'y');
hold on;

sigma_2=b^2/(12*n);
R=normrnd(0,sqrt(sigma_2),1,len);

[ps2,t2]=hist(R,50);
ps2=ps2/(sum(ps2)*(t2(2)-t2(1)));  % normalize discrete distribution
plot(t2,ps2,'bo-','linewidth',1.5);
hold on
plot(t2,exp(-t2.^2/(2*sigma_2))/sqrt(2*pi*sigma_2),'r'); %plot continuous distribution

и вот результат: введите здесь описание изображения

person Ali Mirzaei    schedule 19.09.2015