我正在使用命令:[V,D] = eig(X)在MATLAB中,如何提取p个最大特征值对应的特征向量?
其中V是特征向量,D是对角矩阵中的特征值。任何关于如何创建Y的想法,Y是与p个最大特征值对应的特征向量矩阵?
我正在使用命令:[V,D] = eig(X)在MATLAB中,如何提取p个最大特征值对应的特征向量?
其中V是特征向量,D是对角矩阵中的特征值。任何关于如何创建Y的想法,Y是与p个最大特征值对应的特征向量矩阵?
一种方法是eigs:
[V,D] = eigs(A,size(A,1)-1)
第二种方式是进行排序:
if ~issorted(diag(D))
[V,D] = eig(A);
[D,I] = sort(diag(D));
V = V(:, I);
end
p=3; %'as a example say we want the eigenvectors for the 3 largest eigenvalues'
X=rand(4); %'take whatever matrix 4x4 for the example'
[V, D] = eig(X);
for ind=1:length(D)
d(ind)=abs(D(ind,ind));
end
[B,IX] = sort(d,'descend');
Y = V(:,IX(1:p));
Y的列包含从左到右按降序排列的特征向量对应的特征向量。 请注意,我使用abs()函数来测量特征值的“大小”。请注意,也许你更喜欢使用其他功能。
为什么for循环使用,而不仅仅是' [〜,IX] = sort(abs(diag(D)))或者[V,D] = eig(X,'vector'); [〜,IX] = sort(abs(D))'? – Dan 2014-09-30 06:00:09
如果'p'不大,可以考虑'eigs' – bla 2014-09-30 03:42:37