2010-11-14 37 views
2

W est un vrai grand et maigre matrice évaluée, et diag(S) est une matrice diagonale est constituée de +1 ou -1 sur la diagonale. Je veux la décomposition propre de A = W * diag(S) * W' où la citation simple dénote la transposition. Le problème principal est que A est assez grand. Depuis A est symétrique, le rang est déficient, et je connais réellement le rang maximum de A (de W), je pense que je devrais être capable de le faire efficacement. Une idée de comment aborder cela?décomposition Eigen d'une matrice de forme W * diag (S) * W » pour la matrice exponentielle MATLAB

Mon objectif éventuel est de calculer l'exponentielle matricielle de A sans utiliser le expm de MATLAB qui est assez lent pour les grandes matrices et ne tire pas parti de la déficience de rang. Si A = U * diag(Z) * U' est la décomposition propre, exp(A) = U * diag(exp(Z)) * U'.

Tout en trouvant un U orthogonale tel que W * diag(S) * W' = U' * diag(Z) * U' semble prometteur d'avoir un algorithme facile, j'ai besoin d'une aide d'algèbre linéaire ici.

Répondre

3

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, utilisez ceci pour calculer la décomposition eig de 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.

+0

Excellente suggestion. – Memming

2

MATLAB a en fait une implémentation pour récupérer les valeurs propres les plus grandes (ou les plus petites). Utilisez eigs(A,k) pour obtenir le k le plus grand.

Pour obtenir le plus grand seulement, on peut utiliser la méthode Power iteration, ou mieux encore l'itération de quotient Rayleigh.