%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Este script gera um vetor de amostras aleatórias de acordo com uma certa
% distribuição e plota sua CDF e um histograma.
% É também mostrada a convergência da média deste vetor para o valor
% esperado da distribuição à medida que o número de amostras no vetor
% aumenta, mostrando a lei dos grandes números.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% André Noll Barreto, Universidade de Brasília, 2013
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Parâmetros
n = 100000;    % número de amostras no vetor aleatório
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

close all

%%%%%%%%%%%%%%%%
% v.a uniforme
x = rand(1,n);
x = sort(x);

%CDF
F = (1:n)/n;

figure(1)
subplot(2,2,1)
plot(x, F)
title ('CDF - v.a. uniforme')

% histograma
nbins = 50;
subplot(2,2,2)
hist(x,nbins);
title ('Histograma ( 50 bins ) - v.a. uniforme')

%%%%%%%%%%%%%%%%%%%
%v.a. exponencial
mu = 1;
x = exprnd(mu, 1,n);
x = sort(x);

%CDF
F = (1:n)/n;

subplot(2,2,3)
plot(x, F)
title ('CDF - v.a. exponencial')

% histograma
nbins = 50;
subplot(2,2,4)
hist(x,nbins);
title ('Histograma ( 50 bins ) - v.a. exponencial')


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% convergência do valor esperado
n = 1:10:10000;
m = zeros(size(n));
sigma2 = zeros(size(n));
for k = 1:length(n)
   x = rand(1, n(k));
   m(k) = mean(x);
   sigma2(k) = var(x);
end

figure(2)
plot(n, m, n, sigma2, n, 0.5*ones(size(n)), n, ones(size(n))/12);
xlabel('número de amostras')
legend('média', 'variância')
