Que yo sepa, hay 4 formas de resolver un sistema de ecuaciones lineales (corríjame si hay más):
- Si la matriz del sistema es una matriz cuadrada de rango completo, puede usar la Regla de Cramer;
- Calcule el inverso o el seudoinverso de la matriz del sistema;
- Utilice métodos de descomposición matricial (la eliminación de Gauss o Gauss-Jordan se considera descomposición de LU);
- Use métodos iterativos, como el método de gradiente conjugado.
De hecho, casi nunca desea resolver las ecuaciones utilizando la regla de Cramer o calculando el inverso o seudoinverso, especialmente para matrices de altas dimensiones, por lo que la primera pregunta es cuándo usar métodos de descomposición y métodos iterativos, respectivamente. Supongo que depende del tamaño y las propiedades de la matriz del sistema.
La segunda pregunta es, a su entender, qué tipo de métodos de descomposición o métodos iterativos son más adecuados para cierta matriz del sistema en términos de estabilidad numérica y eficiencia.
Por ejemplo, el método de gradiente conjugado se usa para resolver ecuaciones donde la matriz es simétrica y definida positiva, aunque también se puede aplicar a cualquier ecuación lineal convirtiendo en . También para una matriz definida positiva, puede usar el método de descomposición Cholesky para buscar la solución. Pero no sé cuándo elegir el método CG y cuándo elegir la descomposición de Cholesky. Creo que es mejor que usemos el método CG para matrices grandes.
Para las matrices rectangulares, podemos usar la descomposición QR o SVD, pero nuevamente no sé cómo elegir una de ellas.
Para otras matrices, ahora no sé cómo elegir el solucionador apropiado, como matrices hermitianas / simétricas, matrices dispersas, matrices de banda, etc.
fuente
Respuestas:
Como no existe un almuerzo gratis, por lo general, debe decidir una compensación entre los dos. Después de eso, comienza a mirar la matriz (y su hardware) para decidir sobre un buen método (o más bien, el método para el que puede encontrar una buena implementación). (Observe cómo evité escribir "mejor" aquí ...) Las propiedades más relevantes aquí sonA
Con esto en mente, debe buscar la literatura (enorme) y evaluar los diferentes métodos que encuentre para su problema específico. Aquí hay algunos comentarios generales:
Si realmente necesita (casi) precisión de máquina para su solución, o si su matriz es pequeña (por ejemplo, hasta filas), es difícil superar los métodos directos, especialmente para sistemas densos (ya que en este caso, cada multiplicación de matriz será , y si necesita muchas iteraciones, esto podría no estar muy lejos de que necesita un método directo). Además, la descomposición LU (con pivote) funciona para cualquier matriz invertible, a diferencia de la mayoría de los métodos iterativos. (Por supuesto, si es simétrico y positivo definido, usaría Cholesky).1000 O(n2) O(n3) A
Esto también es cierto para las matrices dispersas (grandes) si no tiene problemas de memoria: las matrices dispersas en general no tienen una descomposición LU dispersa, y si los factores no encajan en la memoria (rápida), estos métodos se vuelven inutilizables.
Además, los métodos directos han existido por mucho tiempo, y existe software de muy alta calidad (por ejemplo, UMFPACK, paperas, SuperLU para matrices dispersas), que automáticamente se puede explotar la estructura de bandas de .A
Si necesita menos precisión o no puede usar métodos directos, elija un método de Krylov (por ejemplo, CG si es simétrico positivo definido, GMRES o BiCGStab si no) en lugar de un método estacionario (como Jacobi o Gauss-Seidel): estos generalmente funcionan mucho mejor, ya que su convergencia no está determinada por el radio espectral de sino por (la raíz cuadrada) del número de condición y no depende de la estructura de la matriz. Sin embargo, para obtener un rendimiento realmente bueno del método Krylov, debe elegir un buen preacondicionador para su matriz, y eso es más un oficio que una ciencia ...A A
Si en repetidas ocasiones necesita resolver sistemas lineales con la misma matriz y diferentes lados a la derecha, los métodos directos aún pueden ser más rápidos que los métodos iterativos, ya que solo necesita calcular la descomposición una vez. (Esto supone una solución secuencial; si tiene todos los lados derechos al mismo tiempo, puede usar los métodos de bloqueo de Krylov).
Por supuesto, estas son solo pautas muy generales: para cualquiera de las afirmaciones anteriores, es probable que exista una matriz para la cual lo contrario sea cierto ...
Como solicitó referencias en los comentarios, aquí hay algunos libros de texto y documentos de revisión para comenzar. (Ninguno de estos, ni el conjunto, es exhaustivo; esta pregunta es demasiado amplia y depende demasiado de su problema particular).
fuente
El árbol de decisiones en la Sección 4 del capítulo correspondiente en el Manual de la Biblioteca NAG responde (en parte) algunas de sus preguntas.
fuente
La Documentación de la Biblioteca Eigen también tiene una buena página de resumen con mucha información sobre diferentes descomposiciones de matriz:
http://eigen.tuxfamily.org/dox/group__TopicLinearAlgebraDecompositions.html
fuente