76 lines
2.0 KiB
Matlab
76 lines
2.0 KiB
Matlab
%% central limit theorem
|
|
n = 10000;
|
|
m = 10; % number of loops
|
|
|
|
%% (b) a single data set of random numbers:
|
|
x = rand(n, 1);
|
|
|
|
%% (c) plot probability density:
|
|
%histogram(x, 'Normalization', 'pdf');
|
|
[h,b] = hist(x, 20);
|
|
h = h/sum(h)/(b(2)-b(1)); % normalization
|
|
bar(b, h)
|
|
title('A uniform distribution')
|
|
xlabel('x')
|
|
ylabel('probability density')
|
|
pause(2.0)
|
|
|
|
%% (d) sum of two random numbers:
|
|
y = rand(n, 1);
|
|
x = x + y;
|
|
%histogram(x, 'Normalization', 'pdf');
|
|
[h,b] = hist(x, 20);
|
|
h = h/sum(h)/(b(2)-b(1)); % normalization
|
|
bar(b, h)
|
|
title('Sum of two uniform distributions')
|
|
xlabel('x')
|
|
ylabel('probability density')
|
|
pause(2.0)
|
|
|
|
%% (f) sum up more distributions:
|
|
x = zeros(n, 1);
|
|
means = zeros(m, 1);
|
|
stds = zeros(m, 1);
|
|
for i=1:m
|
|
y = rand(n, 1); % new uniform distributed numbers
|
|
x = x + y; % add them to the sum
|
|
mu = mean(x); % compute mean
|
|
sd = std(x); % compute standard deviation
|
|
means(i) = mu; % store mean
|
|
stds(i) = sd; % store standard deviation
|
|
%xx = min(x):0.01:max(x);
|
|
xx = -1:0.01:i+1; % x-axis values for plot of pdf
|
|
p = exp(-0.5*(xx-mu).^2/sd^2)/sqrt(2*pi*sd^2); % pdf
|
|
plot(xx, p, 'r', 'linewidth', 3 )
|
|
ns = sprintf('N=%d', i);
|
|
text(0.1, 0.9, ns, 'units', 'normalized')
|
|
hold on
|
|
%histogram(x, 20, 'Normalization', 'pdf');
|
|
[h,b] = hist(x, 20);
|
|
h = h/sum(h)/(b(2)-b(1)); % normalization
|
|
bar(b, h)
|
|
hold off
|
|
xlim([-0.5, i+0.5])
|
|
xlabel('x')
|
|
ylabel('summed pdf')
|
|
savefigpdf(gcf, sprintf('centrallimit-hist%02d.pdf', i), 6, 5);
|
|
if i < 6
|
|
pause(3.0)
|
|
end
|
|
end
|
|
|
|
%% (h) mean and standard deviation in dependence on number of summed up distributions:
|
|
nx = 1:m;
|
|
plot(nx, means, 'b', 'linewidth', 4);
|
|
hold on
|
|
plot(nx, stds, 'r', 'linewidth', 4);
|
|
xx = 0:0.01:m;
|
|
sdu = 1.0/sqrt(12); % standarad deviation of the uniform distribution
|
|
plot( xx, sqrt(xx)*sdu, 'k' )
|
|
legend('mean', 'std', 'theory')
|
|
xlabel('N')
|
|
hold off
|
|
savefigpdf(gcf, 'centrallimit-samples.pdf', 6, 5);
|
|
|
|
|