Eigen descomposición de una matriz de la forma W * diag (S) * W' para la matriz exponencial en MATLAB
-
10-10-2019 - |
Pregunta
W
es un verdadero alto y flaco matriz valorada, y diag(S)
es una matriz diagonal consiste en +1
o -1
en la diagonal. Quiero que la descomposición de Eigen A = W * diag(S) * W'
donde comilla simple denota transposición. El problema principal es que A
es bastante grande. Desde A
es simétrica, deficiencia de rango, y de hecho sé que el rango máximo de A
(de W
), creo que debería ser capaz de hacer esto de manera eficiente. ¿Alguna idea de cómo abordar esto?
Mi objetivo final es calcular la exponencial de la matriz de A
sin utilizar expm
de MATLAB que es bastante lento para grandes matrices y no se aprovecha de la deficiencia de rango. Si A = U * diag(Z) * U'
es la descomposición eigen, exp(A) = U * diag(exp(Z)) * U'
.
Si bien la búsqueda de un U
ortogonal tal que se ve W * diag(S) * W' = U' * diag(Z) * U'
la promesa de tener un algoritmo sencillo, necesito un poco de ayuda aquí álgebra lineal.
Solución
La primera vez que había realizar la llamada factorización QR 'fina' de W, a continuación, calcular la descomposición de valores propios de R*diag(S)*R'
, los utilizan para calcular la descomposición de A EIG.
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');
Espero que esto ayude.
A.
Otros consejos
MATLAB en realidad tiene una aplicación para recuperar los mayores (o menores) valores propios y vectores. Uso eigs(A,k)
para obtener el k
más grande.
Para obtener el mayor solamente, se puede utilizar el Poder iteración método, o mejor aún Rayleigh iteración cociente.