Eigen decomposizione di una matrice di forma W * diag (S) * W' per matrice esponenziale in MATLAB
-
10-10-2019 - |
Domanda
W
è un vero alto e magro matrice stimato e diag(S)
è una matrice diagonale consiste di +1
o -1
sulla diagonale. Voglio che l'Eigen decomposizione di A = W * diag(S) * W'
cui sola offerta denota la trasposizione. Il problema principale è che A
è abbastanza grande. Dal momento che A
è simmetrica, rango carente, e io in realtà conosco il grado massimo di A
(da W
), penso che dovrei essere in grado di fare questo in modo efficace. Qualsiasi idea di come affrontare questo?
Il mio obiettivo finale è quello di calcolare l'esponenziale della matrice di A
senza utilizzare expm
di MATLAB che è abbastanza lento per grandi matrici e non approfitta della carenza di rango. Se A = U * diag(Z) * U'
è l'Eigen decomposizione, exp(A) = U * diag(exp(Z)) * U'
.
Mentre trovare un U
ortogonale tale che sembra W * diag(S) * W' = U' * diag(Z) * U'
promettendo di avere un algoritmo semplice, ho bisogno di aiuto di algebra lineare qui.
Soluzione
mi piacerebbe prima di eseguire la cosiddetta 'thin' fattorizzazione QR di W, quindi calcolare la decomposizione autovalore di R*diag(S)*R'
, quindi utilizzare questo per calcolare la decomposizione EIG di 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');
Spero che questo aiuti.
A.
Altri suggerimenti
MATLAB in realtà ha un'implementazione per il recupero più grandi (o più piccolo) Eigen valori e vettori. Utilizzare eigs(A,k)
per ottenere il k
più grande.
Per ottenere il più grande unico, si può usare il Potenza iterazione metodo, o meglio ancora di Rayleigh iterazione quoziente.