%% Analyse von Zufallszahlen-Generatoren
% In diesem Skript untersuchen wir die beiden Zufallsgeneratoren
% Mersenne Twister (Eingebauter Zufallsgenerator in Matlab)
% Linearer Kongruenzgenerator "RANDU" mit (a = 65539, c = 0, m = 2^32)
%% Verteilung der Zufallszahlen
% Wir wollen eine uniforme Verteilung der Zahlen im Bereich [0,1]

n = 10000;

% Betrachte die Verteilung der Zahlen mit Hilfe eines Histograms
histogram(rand(n,1),10)

%
% Und nun die Verteilung unseres LCGs

n = 10000;

% Betrachte die Verteilung der Zahlen mit Hilfe eines Histograms
histogram(lcg(n,1),10)

%
%% Analyse der Unabhaengigkeit der Zufallszahlen
% Jeweils zwei aufeinanderfolgende Punkte werden als X und Y Koordinaten eines Punktes in der 2-dimensionalen Ebene interpretiert

n = 10000;

% Erstelle eine Matrix mit n x 2 zufaelligen Zahlen
r = rand(n,2);

% Interpretiere jede Zeile der Matrix als einen Punkt in 2 Dimensionen
plot(  r(:,1)  ,  r(:,2)  ,'.')
axis([0 1 0 1])

%
% Und jetzt mit unserem LCG

n = 10000;

% Erstelle eine Matrix mit n x 2 zufaelligen Zahlen
r = lcg(n,2);

% Interpretiere jede Zeile der Matrix als einen Punkt in 2 Dimensionen
plot(r(:,1),r(:,2),'.')
axis([0 1 0 1])

%
% Jeweils drei aufeinanderfolgende Punkte werden als X, Y und Z Koordinaten eines Punktes im 3-dimensionalen Raum interpretiert

n = 10000;

% Erstelle eine Matrix mit n x 3 zufaelligen Zahlen
r = rand(n,3);

% Interpretiere jede Zeile der Matrix als einen Punkt in 2 Dimensionen
plot3(r(:,1),r(:,2),r(:,3),'.')
axis([0 1 0 1 0 1])
view([45,25])
grid on

%
% Und jetzt mit unserem LCG

n = 10000;

% Erstelle eine Matrix mit n x 3 zufaelligen Zahlen
r = lcg(n,3);

% Interpretiere jede Zeile der Matrix als einen Punkt in 2 Dimensionen
plot3(r(:,1),r(:,2),r(:,3),'.')
axis([0 1 0 1 0 1])
view([45,25])
grid on