Há vários problemas na sua pergunta.
Não use a eliminação gaussiana (fatoração LU) para calcular a classificação numérica de uma matriz. A fatoração da LU não é confiável para esse fim na aritmética de ponto flutuante. Em vez disso, use uma decomposição QR que revele a classificação (como xGEQPX
ou xGEPQY
no LAPACK, onde x é C, D, S ou Z, embora essas rotinas sejam difíceis de rastrear; consulte a resposta de JedBrown em uma pergunta relacionada ) ou use um SVD (decomposição de valor singular, como xGESDD
or xGESVD
, onde x é novamente C, D, S ou Z). O SVD é um algoritmo mais preciso e confiável para a determinação da classificação numérica, mas requer mais operações de ponto flutuante.
No entanto, para resolver um sistema linear, a fatoração de LU (com rotação parcial, que é a implementação padrão no LAPACK) é extremamente confiável na prática. Existem alguns casos patológicos para os quais a fatoração de LU com pivotamento parcial é instável (ver Lição 22 na Álgebra Linear Numérica).por Trefethen e Bau para detalhes). A fatoração QR é um algoritmo numérico mais estável para resolver sistemas lineares, e é provavelmente por isso que ele fornece resultados tão precisos. No entanto, requer mais operações de ponto flutuante do que a fatoração LU por um fator 2 para matrizes quadradas (acredito; JackPoulson pode me corrigir nisso). Para sistemas retangulares, a fatoração QR é uma escolha melhor, pois produzirá soluções de mínimos quadrados para sistemas lineares sobredeterminados. O SVD também pode ser usado para resolver sistemas lineares, mas será mais caro que a fatoração QR.
janneb está correto que numpy.linalg.svd é um invólucro xGESDD
no LAPACK. As decomposições de valores singulares prosseguem em dois estágios. Primeiro, a matriz a ser decomposta é reduzida à forma bidiagonal. O algoritmo usado para reduzir a forma bidiagonal no LAPACK é provavelmente o algoritmo Lawson-Hanson-Chan e usa a fatoração QR em um ponto. A aula 31 de Álgebra Linear Numérica, de Trefethen e Bau, fornece uma visão geral desse processo. Em seguida, xGESDD
usa um algoritmo de dividir e conquistar para calcular os valores singulares e os vetores singulares esquerdo e direito da matriz bidiagonal. Para obter informações sobre essa etapa, você precisará consultar Matrix Computations de Golub e Van Loan ou Applied Numerical Linear Algebra de Jim Demmel.
Finalmente, você não deve confundir valores singulares com valores próprios . Esses dois conjuntos de quantidades não são os mesmos. O SVD calcula os valores singulares de uma matriz. A computação numérica de Cleve Moler com o MATLAB fornece uma boa visão geral das diferenças entre valores singulares e valores próprios . Em geral, não há relação óbvia entre os valores singulares de uma matriz e seus valores próprios, exceto no caso de matrizes normais , em que os valores singulares são o valor absoluto dos valores próprios.
dgesdd
para SVDs com valor real. Portanto, sua pergunta real é provavelmente "como funciona o Lapack dgesdd?", E isso é bastante problemático para o stackoverflow.