MATLAB中矩阵指数形式W * diag(S)* W'矩阵的特征分解

时间:2010-11-14 16:52:18

标签: matlab linear-algebra svd eigen

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'看起来很容易有一个简单的算法,但我需要一些线性代数帮助。

2 个答案:

答案 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商迭代。

相关问题