Mi pregunta es simple:
¿Cuál es el peor tiempo de ejecución del algoritmo más conocido para calcular una descomposición propia de una matriz ?
¿La descomposición propia se reduce a la multiplicación matricial o son los algoritmos más conocidos (a través de SVD ) en el peor de los casos?
Tenga en cuenta que solicito un análisis del peor de los casos (solo en términos de ), no límites con constantes dependientes del problema, como el número de condición.
EDITAR : Dadas algunas de las respuestas a continuación, permítanme ajustar la pregunta: estaría contento con una aproximación . La aproximación puede ser multiplicativa, aditiva, de entrada o cualquier definición razonable que desee. ¿Estoy interesado si hay un algoritmo conocido que tenga una mejor dependencia de que algo como ?
EDIT 2 : Vea esta pregunta relacionada sobre matrices simétricas .
Respuestas:
Ryan respondió una pregunta similar sobre mathoverflow. Aquí está el enlace: mathoverflow-answer
Básicamente, puede reducir el cálculo del valor propio a la multiplicación de matrices calculando un determinante simbólico. Esto proporciona un tiempo de ejecución de O ( ) para obtener bits de los valores propios; el tiempo de ejecución más conocido actualmente es O ( ) para una aproximación dentro de .norteω + 1metro metro norte3+ n2Iniciar sesión2n logsi 2- b
La referencia de Ryan es `` Victor Y. Pan, Zhao Q. Chen: The Complexity of the Matrix Eigenproblem. STOC 1999: 507-516 ''.
(Creo que también hay una discusión sobre la relación entre las complejidades de los valores propios y la multiplicación de matrices en el antiguo libro de Aho, Hopcroft y Ullman `` The Design and Analysis of Computer Algorithms '', sin embargo, no tengo el libro en delante de mí, y no puedo darte el número de página exacto).
fuente
Encontrar valores propios es inherentemente un proceso iterativo: Encontrar valores propios es equivalente a encontrar las raíces de un polinomio. Además, el teorema de Abel-Ruffini establece que, en general, no se pueden expresar las raíces de un polinomio arbitrario en una forma cerrada simple (es decir, con radicales como la fórmula cuadrática). Por lo tanto, no puede esperar calcular valores propios "exactamente".
Esto significa que un algoritmo de descomposición espectral debe ser aproximado. El tiempo de ejecución de cualquier algoritmo general debe depender de la precisión deseada; no puede depender solo de la dimensión.
No soy un experto en esto. Supongo que una dependencia cúbica de n es bastante buena. Todos los algoritmos que he visto usan la multiplicación matriz-vector, en lugar de la multiplicación matriz-matriz. Así que me sorprendería un poco si todo se reduce a la multiplicación matriz-matriz.
Echa un vistazo a http://en.wikipedia.org/wiki/List_of_numerical_analysis_topics#Eigenvalue_algorithms
fuente
Solo daré una respuesta parcial relacionada con los valores propios de una matriz.
Una vez que se encuentra el polinomio característico, se pueden encontrar las raíces con cualquier grado de precisión deseado utilizando intervalos de aislamiento. Ver el libro de Yap, cap. 6 "Raíces de polinomios" para más detalles. Olvidé el tiempo de ejecución exacto pero su polinomio en el grado del polinomio característico y los dígitos de precisión deseados.
Sospecho que calcular los vectores propios hasta cualquier grado de precisión también es polinomial, pero no veo un algoritmo directo. Existe, por supuesto, la bolsa estándar de trucos que se han mencionado anteriormente, pero hasta donde yo sé, ninguno de ellos garantiza el tiempo de ejecución polinomial para una precisión deseada.
fuente
Puede consultar el nuevo documento de Commandur y Kale que ofrece un algoritmo combinatorio para Max-Cut. Parece (a partir de una lectura superficial) que su algoritmo se basa en encontrar combinatoriamente el vector propio correspondiente al valor propio máximo, y luego usar el algoritmo de Luca Trevisan una vez que tienen este vector propio.
Parece que están utilizando un enfoque alternativo al algoritmo de Lanczos para encontrar dicho vector propio, por lo que podría ser de interés. No estoy seguro de cuál es la supuesta complejidad de su método para encontrar el vector propio, pero podría valer la pena investigarlo. Además, dado que es la relación de aproximación y no el tiempo en sí lo que les interesa, los límites de tiempo que ofrezcan podrían no ser óptimos.
fuente
Esta es una vieja pregunta, pero parece haberse perdido alguna literatura importante.
Sí, existe el documento Pan + Chen + Zheng que sugiere ensamblar el polinomio característico y calcular en BigFloat porque al final se pierden muchos bits de precisión, pero no mucha gente consideraría que este es un enfoque práctico.
También menciono que el algoritmo más utilizado, la iteración Francis QR, no tiene prueba de convergencia para las matrices generales; El libro de Kressner analiza varios contraejemplos.
fuente
Sí, casi todo el álgebra lineal numérica se puede reducir a la multiplicación de matrices, aunque, como siempre, la estabilidad numérica es un problema. Además, con problemas como la descomposición propia, debe contentarse con una aproximación porque la solución puede ser irracional. Echa un vistazo al libro Polynomial and Matrix Computations de Bini and Pan.
Aquí hay otra referencia: el álgebra lineal rápida es estable http://www.netlib.org/lapack/lawnspdf/lawn186.pdf
fuente