Eigen decomposizione di una matrice di forma W * diag (S) * W' per matrice esponenziale in MATLAB

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

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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top