MATLAB索引超出矩阵维度,求大神指点错误!
MATLAB索引超出矩阵维度,求大神指点错误!
最近在做k均值动态聚类的时候,matlab提示索引超出矩阵维度,不知道问题出在哪了。
代码
N1 = 50;
N2 = N1;
N3=N1; % 设置每类样本个数都为50
N = N1+N2+N3;
d = 2; % 设置为二维样本
X1 = rand(d,N1); % 第1类样本,1个样本占1列
X2 = rand(d,N2)+1;
X3=rand(d,N3)+2; % 第2类样本,1个样本占1列
X = [X1 X2 X3];
%----------------------2、初始化----------------------------------
m1_pre = X(:,1); % 初始化第1类均值,令其= x1
m2_pre = X(:,2);
m3_pre=X(:,3); % 初始化第2类均值,令其= x2
epsilon = 0.001; % 收敛阈值
T_max = 1000; % 最大迭代次数
%----------------------3、迭代----------------------------------
for t = 0:T_max
figure; % 画出样本均值
hold on; plot(m1_pre(1),m1_pre(2),‘gv’,‘markersize’,10,‘MarkerFaceColor’,‘g’);
hold on; plot(m2_pre(1),m2_pre(2),‘kv’,‘markersize’,10,‘MarkerFaceColor’,‘k’);
hold on; plot(m3_pre(1),m3_pre(2),‘rv’,‘markersize’,10,‘MarkerFaceColor’,‘r’);
m1 = 0;
m2 = 0;
m3 = 0;
N1 = 0;
N2 = 0;
N3 = 0;
for i = 1:N
xi=X(:,i);
if norm(xi-m1_pre) < norm(xi-m2_pre) && norm(xi-m1_pre) < norm(xi-m3_pre) % 最小距离判别,norm计算向量的模
m1 = m1+xi;
N1 = N1+1;
hold on; plot(xi(1),xi(2),xi(3),‘go’,‘markersize’,5,‘MarkerFaceColor’,‘g’);
else if norm(xi-m2_pre) < norm(xi-m1_pre) && norm(xi-m2_pre) < norm(xi-m3_pre)
m2 = m2+xi;
N2 = N2+1;
hold on; plot(xi(1),xi(2),xi(3),‘ko’,‘markersize’,5,‘MarkerFaceColor’,‘k’);
else norm(xi-m3_pre) < norm(xi-m1_pre) && norm(xi-m3_pre) < norm(xi-m2_pre)
m3 = m3+xi;
N3 = N3+1;
hold on; plot(xi(1),xi(2),xi(3),‘ro’,‘markersize’,5,‘MarkerFaceColor’,‘r’);
end
end
end
m1 = m1/N1;
m2 = m2/N2;
m3 = m3/N3;
t = t+1; % 迭代次数+1
xlabel(‘x_1’,‘fontsize’,16);
ylabel(‘x_2’,‘fontsize’,16);
title(sprintf(‘t=%d’,t),‘fontsize’,20);
if norm(m1 - m1_pre)<epsilon && norm(m2 - m2_pre)<epsilon && norm(m3-m3_pre)<epsilon % 判断是否停止迭代
break;
end
m1_pre = m1; % 更新均值
m2_pre = m2;
m3_pre = m3;
end
disp(sprintf(‘迭代%d次!’,t)); % 显示迭代次数