2010-11-14 102 views
2
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'看起来很有前途,有一个简单的算法,我需要一些线性代数的帮助。

回答

3

我会先进行所谓的“薄” QR W的分解,然后计算的R*diag(S)*R'特征值分解,然后用它来计算A.

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'); 

希望这有助于的EIG分解。

A.

+0

优秀的建议。 – Memming 2010-11-15 20:03:39

2

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

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