在matlab中 遇到 位置 2 处的索引超出数组边界(不能超出 1)。 怎么解决

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果

第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