Hay una serie de problemas en su pregunta.
No utilice la eliminación gaussiana (factorización LU) para calcular el rango numérico de una matriz. La factorización LU no es confiable para este propósito en aritmética de coma flotante.En su lugar, use una descomposición QR reveladora de rango (como xGEQPX
o xGEPQY
en LAPACK, donde x es C, D, S o Z, aunque esas rutinas son difíciles de rastrear; vea la respuesta de JedBrown en una pregunta relacionada ), o use un SVD (descomposición de valores singulares, como xGESDD
o xGESVD
, donde x es nuevamente C, D, S o Z). El SVD es un algoritmo más preciso y confiable para la determinación del rango numérico, pero requiere más operaciones de punto flotante.
Sin embargo, para resolver un sistema lineal, la factorización LU (con pivote parcial, que es la implementación estándar en LAPACK) es extremadamente confiable en la práctica. Hay algunos casos patológicos para los que la factorización LU con pivote parcial es inestable (ver Lección 22 en Álgebra lineal numérica).por Trefethen y Bau para más detalles). La factorización QR es un algoritmo numérico más estable para resolver sistemas lineales, por lo que es probable que le proporcione resultados tan precisos. Sin embargo, requiere más operaciones de punto flotante que la factorización LU por un factor de 2 para matrices cuadradas (creo; JackPoulson puede corregirme sobre eso). Para los sistemas rectangulares, la factorización QR es una mejor opción porque generará soluciones de mínimos cuadrados para sistemas lineales sobredeterminados. SVD también se puede usar para resolver sistemas lineales, pero será más costoso que la factorización QR.
janneb tiene razón en que numpy.linalg.svd es una envoltura xGESDD
en LAPACK. Las descomposiciones de valores singulares proceden en dos etapas. Primero, la matriz a descomponer se reduce a forma bidiagonal. El algoritmo utilizado para reducir a forma bidiagonal en LAPACK es probablemente el algoritmo Lawson-Hanson-Chan, y utiliza la factorización QR en un punto. La lección 31 en Álgebra lineal numérica de Trefethen y Bau ofrece una visión general de este proceso. Luego, xGESDD
utiliza un algoritmo de divide y vencerás para calcular los valores singulares y los vectores singulares izquierdo y derecho de la matriz bidiagonal. Para obtener información sobre este paso, deberá consultar Matrix Computations de Golub y Van Loan, o Applied Numerical Linear Algebra de Jim Demmel.
Finalmente, no debe confundir valores singulares con valores propios . Estos dos conjuntos de cantidades no son lo mismo. El SVD calcula los valores singulares de una matriz. La computación numérica de Cleve Moler con MATLAB ofrece una buena descripción de las diferencias entre valores singulares y valores propios . En general, no existe una relación obvia entre los valores singulares de una matriz dada y sus valores propios, excepto en el caso de las matrices normales , donde los valores singulares son el valor absoluto de los valores propios.
dgesdd
para SVDs con valor real. Entonces, su verdadera pregunta es probablemente "¿cómo funciona Lapack dgesdd?"