Eigen décomposition d'une matrice de forme W * diag (S) * W » pour la matrice exponentielle MATLAB

StackOverflow https://stackoverflow.com/questions/4178523

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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top