Quiero calcular el espectro ( todos los valores propios) de una gran matriz dispersa (cientos de miles de filas). Esto es duro.
Estoy dispuesto a conformarme con una aproximación. ¿Hay métodos de aproximación para hacer esto?
Si bien espero una respuesta general a esta pregunta, también estaría satisfecho con una respuesta en el siguiente caso específico. Mi matriz es un laplaciano normalizado de un gráfico grande. Los valores propios estarán entre 0 y 2 con un gran número de ellos agrupados alrededor de 1.
Respuestas:
Si su gráfico no está dirigido (como sospecho), la matriz es simétrica y no puede hacer nada mejor que el algoritmo de Lanczsos (con reortogonalización selectiva si es necesario para la estabilidad). Como el espectro completo consta de 100000 números, supongo que está interesado principalmente en la densidad espectral.
Para obtener una densidad espectral aproximada, tome el espectro del subespacio Krylov líder de dimensión 100 más o menos, y reemplace su densidad discreta por una versión suavizada.
El espectro principal de Krylov tendrá valores propios bien aislados casi resueltos (en caso de que existan), se aproximará a los valores propios al final del espectro no aislado, y es algo aleatorio intermedio, con una distribución cuya función de distribución acumulativa se asemeja a la del espectro verdadero . Sería convergente en aritmética exacta si la dimensión crece. (Si su operador fuera de dimensión infinita, este sería el caso, y obtendría la integral de la verdadera función de densidad espectral en el espectro continuo).
fuente
La respuesta de Arnold Neumaier se analiza con más detalle en la sección 3.2 del documento "Aproximación de densidades espectrales de grandes matrices" de Lin Lin, Yousef Saad y Chao Yang (2016) .
También se discuten otros métodos, pero el análisis numérico al final del artículo muestra que el método Lanczos supera a estas alternativas.
fuente
Si está de acuerdo con pensar en cosas que no son valores propios, sino funciones que, en cierto sentido, aún le dicen algo sobre el espectro, entonces creo que debería revisar parte del trabajo de Mark Embree en la Universidad de Rice.
fuente
Aquí hay otra forma de caracterizar el espectro.
fuente
Consulte el documento "Sobre la descomposición espectral aproximada basada en muestreo" de Sanjiv Kumar, Mehryar Mohri y Ameet Talwalkar (ICML 2009.). Utiliza el muestreo de columnas de su matriz.
Como su matriz es simétrica, debe hacer lo siguiente:
Deje A ser su matriz n * n. Desea reducir el cálculo de los valores propios de una matriz n * n al cálculo de los valores propios de una matriz k * k. Primero elige tu valor de k. Digamos que elige k = 500, ya que puede calcular fácilmente los valores propios de una matriz 500 * 500. Luego, elija al azar k columnas de la matriz A. Construya la matriz B que mantiene solo estas columnas y las filas correspondientes.
B = A (x, x) para un conjunto aleatorio de k índices x
B es ahora una matriz ak * k. Calcule los valores propios de B y multiplíquelos por (n / k). Ahora tiene valores k que se distribuyen aproximadamente como los n valores propios de A. Tenga en cuenta que solo obtiene valores k, no n, pero su distribución será correcta (hasta el hecho de que son una aproximación).
fuente
Siempre puede usar los límites del Teorema del círculo de Gershgorin para aproximar los valores propios.
Si los términos fuera de la diagonal son pequeños, la diagonal en sí misma es una buena aproximación del espectro. De lo contrario, si termina con una aproximación del espacio propio (por otros métodos), podría intentar expresar las entradas diagonales en este sistema. Esto conducirá a una matriz con términos fuera de la diagonal más pequeños y la nueva diagonal será una mejor aproximación del espectro.
fuente