function cluster1()
% ======================================================================= %
% Fuzzy-Methoden Matlab-Uebungen
% ----------------------------------------------------------------------- %
% Aufgabenstellung:
%   siehe Uebungsblatt, Aufgabe 12
%   Vervollstaendigen Sie das Skript, sodass die in Aufgabe 11 beschriebene
%   Problemstellung mit der Fuzzy c-means Methode geloest wird. Die
%   entsprechenden Stellen sind mit '%#TODO' gekennzeichnet.
% ======================================================================= %


%% Daten und Einstellungen
% ----------------------------------------------------------------------- %

% Datenpunkte
p = [-4,-2,-1,.5,5,9,10.5,11];

% initiale Clusterzentren
v = [0;6];

% Unschaerfeexponent
gamma = 2;


% Initialisierung der Variablen
d = zeros(length(v), length(p));    % Array der Abstaende

mu = zeros(size(d));                % aktuelle Zugehoerigkeiten
mu_old = zeros(size(d));            % Zugehoerigkeiten aus vorherigem
                                    % Schritt
v_all = v;                          % Matrix aller Clusterzentren; zeigt
                                    % den Verlauf der Zentren mit den
                                    % Iterationsschritten
count = 0;                          % Zaehlervariable



%% Cluster-Berechnung
% ----------------------------------------------------------------------- %

% Schleife zur iterativen Bestimmung der Clusterzentren und
% Zugehoerigkeiten
while count < 100
    % Zaehler
    count = count + 1;
    
    % Bestimmung der Abstaende der Datenpunkte zu den aktuellen
    % Clusterzentren
    for id = 1:length(v)
        d(id, :) = ... ; %#TODO
    end
    
    % Berechnung der Zugehoerigkeiten
    for ic = 1:length(v)
        ... %#TODO
    end
    
    % Aenderungen der Zugehoerigkeiten
    chg = max(max(abs(mu - mu_old)));
    fprintf('Iteration %i; Current max. change: %f\n', count, chg);
    
    % Abbruchkriterium
    if chg < 0.05
        break;
    end
    
    % Clusterzentren fuer die naechste Iteration
    v = ... ; %#TODO
       
    % Variablen fuer naechsten Schleifendurchlauf und fuer Ergebnis 
    mu_old = mu;
    v_all = [v_all, v];
    
end


%% Ergebnisse
% ----------------------------------------------------------------------- %

h = figure(1);
set(h, 'Name', 'Fuzzy-Clustering');

subplot(3,5,1:5)
plot(p, zeros(size(p)), 'k*', v_all(1,1), 0, 'bd', v_all(2,1), 0, 'rd');
ylim([-1, 1])
title('Initial State of Data Points and Cluster Centers')
xlabel('x')
legend('Data Points', 'Cluster Center 1', 'Cluster Center 2', ...
    'Location', 'EastOutside');

subplot(3,5,6:10);
plot(p, zeros(size(p)), 'k*', v(1,:), zeros(size(v,2),1), 'bd', ...
    v(2,:), zeros(size(v,2),1), 'rd');
ylim([-1, 1])
title('Final State of Data Points and Cluster Centers')
xlabel('x')
legend('Data Points', 'Cluster Center 1', 'Cluster Center 2', ...
    'Location', 'EastOutside')

subplot(3,5,11:12);
plot(1:count, v_all(1,:), 'b-d', 1:count, v_all(2,:), 'r-d');
title('Positions of Cluster Centers')
ylabel('x')
xlabel('Iteration')

subplot(3,5,13:15);
plot(p, mu(1,:),'bd-', p, mu(2,:), 'rd-');
title('Membership Levels of Data Points to Clusters')
xlabel('x'), ylabel('Membership Level \mu');
legend('Cluster 1', 'Cluster 2', 'Location', 'EastOutside')
