en matlab, ¿qué diferencias hay entre linsolve y mldivide?

10

en matlab, tanto linsolve como mldivide se usan para resolver un sistema de ecuaciones lineales, en todos los casos determinados, sobredeterminados y subdeterminados.

Al leer sus documentos, me preguntaba qué diferencias hay entre ellos. ¿Están usando casi los mismos algoritmos de factorización matricial y triangularización en los tres casos?

Si A tiene las propiedades en opts, linsolve es más rápido que mldivide, porque linsolve no realiza ninguna prueba para verificar que A tenga las propiedades especificadas

¿Mldivide realiza las mismas pruebas para verificar si A tiene las propiedades especiales? ¿O mldivide solo los trata como un caso general sin las propiedades especiales?

¡Gracias!

Tim
fuente

Respuestas:

16

Ambos son solucionadores directos para resolver sistemas lineales (opuestos al solucionador iterativo).

mldivideAAx=bmldivide

mldividepara matrices cuadradas: si A es simétrica y tiene elementos diagonales positivos reales, MATLAB intenta una factorización de Cholesky. Si la factorización de Cholesky falla, MATLAB realiza una factorización simétrica e indefinida. Si A es superior a Hessenberg, MATLAB usa la eliminación gaussiana para reducir el sistema a una matriz triangular. Si A es cuadrado pero no es triangular permutado, definido simétrico y positivo, o Hessenberg, entonces MATLAB realiza una factorización triangular general utilizando la factorización LU con pivote parcial

linsolve para matrices cuadradas: factorización LU con pivote parcial

mldividey linsolvepara matrices rectangulares: factorización QR

linsolveoptsA

opts.POSDEF = true; linsolve(A,b,opts)

xAopts

Si se cumplen ciertos criterios linsolvey se mldivideutiliza el mismo proceso de factorización. Por ejemplo, para un sistema definido positivo denso que satisface ciertas propiedades, o tiene un sistema sobredeterminado y ambos realizan un ajuste de mínimos cuadrados.

Además, linsolvetambién podría realizar cálculos simbólicos . Esto es útil cuando tiene un pequeño sistema subdeterminado que tiene un número infinito de soluciones. linsolvele permite resolverlo simbólicamente, mldivideno puede hacer eso. Sin embargo, si las variables no se declaran simbólicamente mldividey linsolvele darían el mismo mensaje de advertencia "Matrix es singular para la precisión de trabajo".

Por último, pero no menos importante, linsolveno es compatible con sistemas dispersos como la siguiente matriz (punto azul significa entrada distinta de cero). Si bien mldividepodría manejar sistemas dispersos de manera robusta cuando el tamaño es inferior a 200k por 200k. ejemplo escaso

Shuhao Cao
fuente