【问题标题】:Eigen decomposition of a matrix of form W * diag(S) * W' for matrix exponential in MATLABMATLAB中矩阵指数形式W * diag(S) * W'的矩阵的特征分解
【发布时间】:2011-05-09 21:01:15
【问题描述】:

W 是一个又高又瘦的实值矩阵,diag(S) 是一个对角矩阵,由对角线上的 +1-1 组成。我想要A = W * diag(S) * W' 的特征分解,其中单引号表示转置。主要问题是A 相当大。由于A 是对称的,秩不足,而且我实际上知道A 的最大秩(来自W),我想我应该能够有效地做到这一点。知道如何解决这个问题吗?

我的最终目标是在不使用 MATLAB 的 expm 的情况下计算 A 的矩阵指数,这对于大矩阵来说非常慢并且没有利用秩不足。如果A = U * diag(Z) * U'是特征分解,exp(A) = U * diag(exp(Z)) * U'

虽然找到一个正交的U 使得W * diag(S) * W' = U' * diag(Z) * U' 看起来很有希望有一个简单的算法,但我需要一些线性代数的帮助。

【问题讨论】:

    标签: matlab linear-algebra svd eigenvalue eigenvector


    【解决方案1】:

    我首先对 W 执行所谓的“瘦”QR 分解,然后计算 R*diag(S)*R' 的特征值分解,然后用它来计算 A 的 eig 分解。

    N = 10;
    n=3;
    S = 2*(rand(1,n)>0.5)-1;
    W = rand(N,n);
    
    [Q,R] = qr(W,0);
    [V,D] = eig(R*diag(S)*R');
    
    %this is the non rank-deficient part of eig(W*diag(S)*W')
    D_A = D;
    V_A = Q*V;
    
    %compare with
    [V_full,D_full] = eig(W*diag(S)*W');
    

    希望这会有所帮助。

    一个。

    【讨论】:

      【解决方案2】:

      MATLAB 实际上有一个用于检索最大(或最小)特征值和向量的实现。使用eigs(A,k) 获得最大的k

      要获得最大的,可以使用Power iteration 方法,或者更好的瑞利商迭代。

      【讨论】:

        猜你喜欢
        • 2017-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-27
        • 1970-01-01
        • 2012-08-04
        • 2017-08-23
        • 1970-01-01
        相关资源
        最近更新 更多