Tengo un programa que calcula el mayor valor propio de muchas matrices simétricas reales de 50x50 realizando descomposiciones de valor singular en todas ellas. El SVD es un cuello de botella en el programa.
¿Existen algoritmos que son mucho más rápidos para encontrar el valor propio más grande, o la optimización de esta parte no daría mucho retorno de la inversión?
Respuestas:
Dependiendo de la precisión que necesite para el valor propio más grande, puede intentar usar la iteración de potencia .
Para su ejemplo específico, iría tan lejos como para no formar explícitamente, pero calcularía x ← X ( X T x ) en cada iteración. Calcular A requeriría operaciones O ( n 3 ) mientras que el producto matriz-vector requiere solo O ( n 2 ) .A=XXT x←X(XTx) A O(n3) O(n2)
La tasa de convergencia depende de la separación entre los dos valores propios más grandes, por lo que puede no ser una buena solución en todos los casos,
fuente
Si solo 5 valores propios son muy significativos, el algoritmo de Lanczsos con como multiplicación matriz-vector debería dar una convergencia lineal rápida después de 5 pasos iniciales, por lo tanto, un valor propio más grande bastante preciso con pocas iteraciones.X(XTx)
fuente
Para una matriz semi-definida positiva como , puede valer la pena acelerar la convergencia con un cambio de espectro . Es decir, un escalar adecuada μ se elige y el método se aplica energía a A - μ I en lugar de una .A=XXT μ A−μI A
Unas pocas iteraciones del método de potencia básico deberían darle una estimación aproximada del mayor valor propio λ 1 . Suponiendo que el valor propio dominante tiene multiplicidad 1 y que todos los demás están en [ 0 , 5||Ax||/||x|| λ1 , luegoA-5[0,56λ1] gustaría tener un valor propio más grande7A−512λ1I y el resto en[-5712λ1 .[−512λ1,512λ1]
En otras palabras, aumentaría el dominio del valor propio más grande del 20% sobre el siguiente valor más grande al 40% sobre el siguiente valor propio más grande (valor absoluto de un). La convergencia geométrica del método de potencia se aceleraría en consecuencia. Una vez que se encuentra el valor propio más grande de con suficiente precisión, se estima λ 1 agregando de nuevo el desplazamiento μ que se había eliminado.A−μI λ1 μ
Tenga en cuenta que no es necesario que forme explícitamente porque ( A - μ I ) x = X ( X T x ) - μ x aún puede calcularse con un esfuerzo O ( n 2 ) .A−μI (A−μI)x=X(XTx)−μx O(n2)
fuente