Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear all;
- close all;
- clc
- X_nach = load('/Users/marialukasova/Downloads/CD_ИАД_2019-3/ЛР_5/Data_Lab5/data4.txt');
- x = X_nach(:, 1);
- y = X_nach(:, 2);
- %S = size(X_nach);
- figure;
- plot (x, y, '*');
- k = 2;
- C = zeros(k,2);
- for i = 1 : k
- C(i, :) = X_nach(i , :);
- end
- U = zeros(length(X_nach) , 2);
- eps = 1e-6;
- Q = 1000;
- Q_minus = 0;
- R = zeros(1,k);
- for i = 1 : length(X_nach)
- for n = 1 : k
- R(n) = pdist([X_nach(i , :) ; C(n , :)],'euclidean'); %расстояния
- end
- for n = 1 : k
- if R(n) == min(R)
- U(i,1) = n;
- U(i,2) = R(n);
- end
- end
- end
- %temp = 0;
- while abs(Q - Q_minus)>eps
- % temp = temp+ 1
- Q = Q_minus;
- C = zeros(k,2);
- for l = 1 : k
- n = 0;
- for j = 1 : length(U)
- if (U(j,1)==l)
- n = n+1;
- C(l, :) = C(l, :) + X_nach(j , :);
- %disp(C);
- end
- end
- C(l, :) = C(l, :)./n; %среденее арифм коорд = центр
- end
- P = zeros(1,k);
- for i = 1 : length(X_nach)
- for n = 1 : k
- P(n) = pdist([X_nach(i , :) ; C(n , :)],'euclidean');
- end
- for n = 1 : k
- if P(n) == min(P)
- U(i,1) = n;
- U(i,2) = P(n);
- end
- end
- end
- u = zeros(1,k);
- for l = 1 : k
- for j = 1 : length(U)
- if (U(j,1)==l)
- u(l) = u(l)+U(j,2);
- end
- end
- end
- Q_minus = sum(u);
- end
- figure
- gscatter(X_nach(:,1), X_nach(:,2), U(:,1))
- hold on
- scatter(C(:,1),C(:,2),'X', 'k')
Advertisement
Add Comment
Please, Sign In to add comment