%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Este script mostra que a soma de várias variáveis aleatórias i.i.d. tende
% a uma variável aleatória Gaussiana.
% Primeiramente é verificado graficamente que a PDF da soma de um número de
% variáveis aleatórias uniformes (que é a convolução das PDFS),  tende a
% uma Gaussiana. Depois são gerados vetores aleatórios e é mostrado que
% seus histogramas tendem a uma Gaussiana.
% O mesmo processo é repetido para variáveis aleatórias exponenciais.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% André Noll Barreto, Universidade de Brasília, 2013
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


close all

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Gerar PDF de uma v.a. uniforme e de suas somas
interval = .01;
x = -10:interval:10;
N=length(x);
px = unifpdf(x,-1,1);
[mx, varx] = unifstat(-1,1);

T0 = (max(x)-min(x))/(N-1);

px2 = conv(px,px,'same')*T0;
px3 = conv(px2,px,'same')*T0;
px4 = conv(px3,px,'same')*T0;
pxgauss = normpdf(x, mx*4, sqrt(varx*4));

figure (1)
plot(x,px,x,px2,x,px3,x,px4,x,pxgauss)
title('Soma de V.A.s uniformes')
legend('1 V.A.','2 V.A.s','3 V.A.','4 V.A.s','Gaussiana (~4 V.A.s)')


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Gerar vetores aleatórios de uma v.a. uniforme e de suas somas e mostrar
% histogramas

figure(2)
xr = unifrnd(-1,1,1,10000);
subplot(2,2,1)
hist(xr,50)
title('Histograma - 1 V.A.')

xr = xr+unifrnd(-1,1,1,10000);
subplot(2,2,2)
hist(xr,50)
title('Histograma - 2 V.A.s')

xr = xr+unifrnd(-1,1,1,10000);
subplot(2,2,3)
hist(xr,50)
title('Histograma - 3 V.A.s')

xr = xr+unifrnd(-1,1,1,10000);
subplot(2,2,4)
hist(xr,50)
title('Histograma - 4 V.A.s')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Gerar PDF de uma v.a. uniforme e de suas somas
interval = .01;
x = -20:interval:20;
N=length(x);

[mx, varx] = expstat(1);

T0 = (max(x)-min(x))/(N-1);
px = exppdf(x,1);


px2 = conv(px,px,'same')*T0;
px3 = conv(px2,px,'same')*T0;
px4 = conv(px3,px,'same')*T0;
px5 = conv(px4,px,'same')*T0;
px6 = conv(px5,px,'same')*T0;
px7 = conv(px6,px,'same')*T0;
px8 = conv(px7,px,'same')*T0;

pxgauss4 = normpdf(x, mx*4, sqrt(varx*4));
pxgauss8 = normpdf(x, mx*8, sqrt(varx*8));

figure (3)
plot(x,px,x,px2,x,px3,x,px4,x,px8, x, pxgauss4,x, pxgauss8)
title('Soma de V.A.s exponenciais')
legend('1 V.A.','2 V.A.s','3 V.A.','4 V.A.s','8 V.A.s','Gaussiana (~4 V.A.s)','Gaussiana (~8 V.A.s)')


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Gerar vetores aleatórios de uma v.a. uniforme e de suas somas e mostrar
% histogramas

figure(4)
xr = exprnd(1,1,10000);
subplot(2,2,1)
hist(xr,50)
title('Histograma - 1 V.A.')

xr = xr+exprnd(1,1,10000);
subplot(2,2,2)
hist(xr,50)
title('Histograma - 2 V.A.s')

xr = xr+exprnd(1,1,10000);
subplot(2,2,3)
hist(xr,50)
title('Histograma - 3 V.A.s')

xr = xr+exprnd(1,1,10000);
subplot(2,2,4)
hist(xr,50)
title('Histograma - 4 V.A.s')

