Eigen-Zerlegung einer Matrix der Form W * diag (S) * W‘für Matrix-Exponentialfunktion in MATLAB

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

Frage

W ist groß und dünn reelle Matrix geschätzt und diag(S) ist eine diagonale Matrix besteht aus +1 -1 oder auf den Diagonalen. Ich möchte die Eigen Zersetzung von A = W * diag(S) * W' wo Apostroph Umsetzung bezeichnet. Das Hauptproblem ist, dass A ziemlich groß ist. Da A symmetrisch ist, Rang mangelhaft, und ich weiß eigentlich den maximalen Rang A (von W), ich denke, ich soll dies tun effizient können. Jede Idee, wie man diesen Ansatz?

Mein Fernziel ist es, die Exponentialmatrix von A zu berechnen, ohne MATLAB expm verwendet, die für große Matrizen ziemlich langsam ist und nicht nutzen Rang Mangel. Wenn A = U * diag(Z) * U' ist die Eigenzersetzung, exp(A) = U * diag(exp(Z)) * U'.

Während eine orthogonale U zu finden, so dass W * diag(S) * W' = U' * diag(Z) * U' sieht einen einfachen Algorithmus zu haben, viel versprechend, brauche ich einige lineare Algebra Hilfe hier.

War es hilfreich?

Lösung

Ich würde zuerst die so genannte ‚dünn‘ QR-Faktorisierung von W ausführen, dann berechnen die Eigenwertzerlegung von R*diag(S)*R', dann ist dies verwenden, um die eig Zerlegung von A zu berechnen.

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, das hilft.

A.

Andere Tipps

MATLAB hat tatsächlich eine Implementierung für das Abrufen der größten (oder kleinsten) Eigenwerte und Vektoren. Verwenden eigs(A,k) bekommen die k größten ist.

Um die größten nur zu erhalten, kann man verwenden, um die Vektoriteration Methode, oder besser noch Rayleigh Quotient Iteration.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top