W
是一个高而瘦的实值矩阵,diag(S)
是对角矩阵,由对角线上的+1
或-1
组成。我想要A = W * diag(S) * W'
的特征分解,其中单引号表示转置。主要问题是A
非常大。由于A
是对称的,排名不足,而我实际上知道A
的最大排名(来自W
),我想我应该能够有效地做到这一点。知道如何处理这个吗?
我最终的目标是计算A
的矩阵指数而不使用MATLAB的expm
,这对于大矩阵来说非常慢,并且没有利用秩缺陷。如果A = U * diag(Z) * U'
是特征分解,exp(A) = U * diag(exp(Z)) * U'
。
虽然找到正交U
使得W * diag(S) * W' = U' * diag(Z) * U'
看起来很容易有一个简单的算法,但我需要一些线性代数帮助。
答案 0 :(得分:3)
我首先执行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');
希望这有帮助。
一个。
答案 1 :(得分:2)
MATLAB实际上有一个用于检索最大(或最小)特征值和向量的实现。使用eigs(A,k)
获取k
最大。
要获得最大值,可以使用Power iteration方法,或者更好的Rayleigh商迭代。