function T7H5

% T7H5
% Zieht eine vom Benutzer anzugebende Anzahl Zufallszahlen aus zwei
% Normalverteilungen und ordnet diese anschließend nach dem
% Maximum-Likelihood-Prinzip den beiden Verteilungen zu. Dabei werden die
% Fehler gezählt und das Ergebnis ausgegeben.

n=input('Wie viele Zufallszahlen sollen insgesamt gezogen werden? ');

n1=round(rand*(ceil(n/2)));  % Anzahl der Zahlen aus Verteilung 1
n2=n-n1;                     % Anzahl der Zahlen aus Verteilung 2

z1=randn(1,n1)*2+5;  % Verteilung 1: m=5, s=2
z2=randn(1,n2)+3;    % Verteilung 2: m=3, s=1

p11=1/(2*sqrt(2*pi)).*exp((-1/2).*((z1-5)./2).^2);  % p, dass z1 aus 1 ist
p12=1/(sqrt(2*pi)).*exp((-1/2).*((z1-3)).^2);       % p, dass z1 aus 2 ist
p21=1/(2*sqrt(2*pi)).*exp((-1/2).*((z2-5)./2).^2);  % p, dass z2 aus 1 ist
p22=1/(sqrt(2*pi)).*exp((-1/2).*((z2-3)).^2);       % p, dass z2 aus 2 ist

z1_ml=[]; % für Zufallszahlen, die per Maximum Likelihood Verteilung 1 zugeordnet werden
z2_ml=[]; % für Zufallszahlen, die per Maximum Likelihood Verteilung 1 zugeordnet werden

fehler=0; % Fehlerzähler

for i=1:n1
    if p11(i)<p12(i)
        z2_ml=[z2_ml z1(i)];
        fehler=fehler+1;     % falsch: Wert aus 1 in 2 einsortiert
    else
        z1_ml=[z1_ml z1(i)]; % richtig
    end
end

for i=1:n2
    if p21(i)<p22(i)
        z2_ml=[z2_ml z2(i)]; % richtig
    else
        z1_ml=[z1_ml z2(i)];
        fehler=fehler+1;     % falsch: Wert aus 2 in 1 einsortiert
    end
end

disp('Sollen die sortierten Werte ausgegeben werden? (Nicht zu empfehlen bei einer großen Anzahl Zufallszahlen.)')
ben=input('Nein (n) oder ja (j). ', 's');

if ben=='j'

    disp('Nach Maximum Likelihood gehören folgende Werte zur ersten Verteilung:')
    z1_ml

    disp('Nach Maximum Likelihood gehören folgende Werte zur zweiten Verteilung:')
    z2_ml
    
end

disp(['Es wurde(n) ' num2str(fehler) ' Fehler gemacht.'])