Eigen décomposition d'une matrice de forme W * diag (S) * W » pour la matrice exponentielle MATLAB
-
10-10-2019 - |
Question
W
est un vrai grand et maigre matrice valeur et diag(S)
est une matrice diagonale se compose de +1
ou -1
sur la diagonale. Je veux la décomposition de eigen A = W * diag(S) * W'
où guillemet simple indique la transposition. Le principal problème est que A
est assez grand. Depuis A
est symétrique, déficient de rang, et je connais le rang maximum de A
(de W
), je pense que je devrais être en mesure de le faire efficacement. Toute idée comment aborder ce sujet?
Mon objectif final est de calculer l'exponentielle de la matrice de A
sans utiliser le expm
de Matlab qui est assez lent pour les grandes matrices et ne profite pas de carence en grade. Si A = U * diag(Z) * U'
est la décomposition Eigen, exp(A) = U * diag(exp(Z)) * U'
.
Alors que la recherche d'un U
orthogonale de telle sorte que les regards de W * diag(S) * W' = U' * diag(Z) * U'
promettant d'avoir un algorithme facile, j'ai besoin de l'aide de l'algèbre linéaire ici.
La solution
Je voudrais tout d'abord effectuer la soi-disant « mince » QR factorisation de W, puis calculer la décomposition de R*diag(S)*R'
valeur propre, puis utilisez ceci pour calculer la décomposition EIG 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');
Hope this helps.
A.
Autres conseils
a en fait une Matlab mise en œuvre pour récupérer les plus grands (ou petits) et des valeurs propres vecteurs. Utilisez eigs(A,k)
pour obtenir le plus grand k
.
Pour obtenir le plus grand que, on peut utiliser la méthode puissance itération, ou mieux encore Rayleigh itération quotient.