MATLAB中矩阵指数的形式w * diag(s) * w'的矩阵的特征分解
-
10-10-2019 - |
题
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'
看起来很容易拥有一种简单的算法,我在这里需要一些线性代数帮助。
解决方案
我首先执行所谓的“薄” QR分解W,然后计算特征值分解 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');
希望这可以帮助。
一个。
其他提示
MATLAB实际上具有用于检索最大(或最小)的特征值和向量的实现。利用 eigs(A,k)
得到 k
最大。
为了获得最大的 电力迭代 方法或更好的瑞利商迭代。
不隶属于 StackOverflow