¿Cuál es la forma más eficiente de calcular el vector propio de una matriz densa correspondiente al valor propio de mayor magnitud?


10

Tengo una matriz cuadrada simétrica real densa. La dimensión es de aproximadamente 1000x1000. Necesito calcular el primer componente principal y preguntarme cuál sería el mejor algoritmo para hacerlo.

Parece que MATLAB usa los algoritmos Arnoldi / Lanczos (para eigs). Pero al leer sobre ellos, no estoy seguro de si tienen alguna ventaja sobre la iteración de potencia simple , ya que mi matriz no es escasa y solo estoy interesado en el primer vector propio.

¿Alguna recomendación de cuál es el algoritmo más rápido en este caso?


1
En mi computadora, en una matriz simétrica 1000 X 1000 generada aleatoriamente, la función "eigen" en R tardó aproximadamente un segundo en calcular todos los valores y vectores propios, redondeando. Su kilometraje puede variar, pero dudo que su elección de algoritmo haga alguna diferencia en momentos como ese.

Sí, eso es cierto, por supuesto. No estoy realmente preocupado por hacer que mi programa se ejecute más rápido. Tengo curiosidad por saber si las técnicas más complicadas mencionadas también se consideran superiores en este caso de uso (denso, solo el primer vector propio), o si existen diferentes técnicas para matrices densas.

¿Te refieres al vector propio correspondiente al valor propio más grande o más pequeño? Parece que quieres lo primero.
Jack Poulson

Sí, el vector propio corresponde al valor propio de mayor magnitud.
Mika Fischer

Respuestas:


12

El método más rápido probablemente dependerá del espectro y la normalidad de su matriz, pero en todos los casos los algoritmos de Krylov deberían ser estrictamente mejores que la iteración de potencia. GW Stewart tiene una buena discusión sobre este tema en el Capítulo 4, Sección 3 de Algoritmos de matriz, Volumen II: Eigensystems :

AuAkuAku

100×100i.95ii=0


Hmm, hubiera pensado que MRRR era ahora el método estándar cuando uno solo quiere algunos vectores propios ...
JM

kO(kn2+k2n+k3)kn

Veo; De alguna manera tuve la impresión de que necesitabas tridiagonalizar primero antes de hacer Krylov. ¡Gracias!
JM

Lanczos en realidad está construyendo gradualmente dicha matriz tridiagonal.
Jack Poulson

5

La iteración de potencia es la más simple, pero como se mencionó anteriormente, probablemente convergería muy lentamente si la matriz es muy no normal. Obtiene un fenómeno de "joroba" donde la secuencia parece divergir durante muchas iteraciones antes de que comience el comportamiento asintótico.

Dado que su matriz es simétrica, podría considerar las iteraciones RQI, que en el caso simétrico producen convergencia cúbica: http://en.wikipedia.org/wiki/Rayleigh_quotient_iteration .

Lo que hace que las iteraciones de Arnoldi o Lanczos sean muy agradables (al menos en mi opinión, pero no investigo el álgebra lineal numérica) es que son muy versátiles. Por lo general, es posible controlar qué valores propios te dan y cuántos obtienes. Esto es especialmente cierto en el caso simétrico (y aún mejor si su matriz es definitiva). Para problemas simétricos son muy robustos. Como caja negra funcionan bien, pero también son muy receptivos a la información de nuevos problemas, como la capacidad de resolver sistemas que involucran la matriz.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.