我正在使用命令:[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