【问题标题】:In MATLAB, how do I pull out p eigenvectors corresponding to the p largest eigenvalues?在MATLAB中,如何拉出p个最大特征值对应的p个特征向量?
【发布时间】:2014-09-30 03:22:08
【问题描述】:

我目前正在使用命令:[V, D] = eig(X)

其中 V 是特征向量,D 是对角矩阵中的特征值。关于如何创建 Y(对应于 p 个最大特征值的特征向量矩阵)的任何想法?

【问题讨论】:

  • 如果p 很小,考虑eigs

标签: matlab eigenvector eigenvalue


【解决方案1】:

一种方法是 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

【讨论】:

    【解决方案2】:
    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))
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    相关资源
    最近更新 更多