第3行[x,y]=eig(B)求完特征值后x应该是向量,第5行x_sort = x(:,yindex)时又将x视为了二维矩阵,可能会报错。
将第5行改为 x_sort = x(yindex)试试。
D=textread('D:\v.TXT');
[m,n]=size(D);
B=1/n*(D'*D) ;
[x,y]=eig(B) ;
y=eig(B);
[y_sort, y_index]= sort(y,'descend');
x_sort=x(:, y_index);
sum_ysort=sum(y_sort) ;
for i=1:n
EN_y(i)=sum(y_sort(1:i))/sum_ysort ;
end
EN_y=EN_y' ;
% for i=1:n
% y_sort(i)=y_sort(i)/sum_ysort ;
% end
for j=1:n
sum_up=zeros(m,n) ;
for i=1:n
sum_up(:,j)= sum_up(:,j)+ x_sort(i,j)*D(:,i) ;
end
fi(:,j)=sum_up(:,j)/norm(sum_up(:,j),2);
cox_a(:,:)=(fi(:,:))'*D(:,:);
Congou=zeros(m,n);
Congou(:,:)=fi(:,1:7)*cox_a(1:7,:);
Cha(:,:)=D-Congou
end