Eigen descomposición de una matriz de la forma W * diag (S) * W' para la matriz exponencial en MATLAB

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

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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top