Eigen-Zerlegung einer Matrix der Form W * diag (S) * W‘für Matrix-Exponentialfunktion in MATLAB
-
10-10-2019 - |
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.
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.