귀하의 질문에 여러 가지 문제가 있습니다.
행렬의 숫자 순위를 계산하기 위해 가우시안 제거 (LU 가산)를 사용하지 마십시오. 부동 소수점 산술에서는 LU 인수 분해를 신뢰할 수 없습니다. 대신 순위를 밝히는 QR 분해 (예 : x가 C, D, S 또는 Z 인 LAPACK 과 같은 xGEQPX
또는 xGEPQY
LAPACK에서 이러한 루틴을 추적하기는 어렵습니다. 관련 질문에 대한 JedBrown의 답변 참조 )를 사용하거나 SVD를 사용하십시오. ( xGESDD
또는 과 같은 특이 값 분해, xGESVD
여기서 x는 다시 C, D, S 또는 Z 임). SVD는 숫자 순위를 결정하는 데보다 정확하고 안정적인 알고리즘이지만 더 많은 부동 소수점 연산이 필요합니다.
그러나 선형 시스템을 해결하기 위해 LU 인수 분해 (LAPACK의 표준 구현 인 부분 피벗 사용)는 실제로 매우 안정적입니다. 부분 피벗을 사용한 LU 분해가 불안정한 병리학 적 사례가 있습니다 ( 숫자 선형 대수의 강의 22 참조)자세한 내용은 Trefethen 및 Bau)가 제공합니다. QR 인수 분해는 선형 시스템을 해결하기위한보다 안정적인 수치 알고리즘이므로 정확한 결과를 얻을 수 있습니다. 그러나 평방 행렬의 경우 2 배로 LU 인수 분해보다 더 많은 부동 소수점 연산이 필요합니다 (JackPoulson이 저를 수정할 수 있다고 생각합니다). 사각형 시스템의 경우 QR 인수 분해는 과도하게 결정된 선형 시스템에 대해 최소 제곱 솔루션을 생성하므로 더 나은 선택입니다. SVD를 사용하여 선형 시스템을 해결할 수도 있지만 QR 인수 분해보다 비쌉니다.
janneb은 numpy.linalg.svd가 xGESDD
LAPACK에서 래퍼 (wrapper)라는 것이 맞습니다 . 특이 값 분해는 두 단계로 진행됩니다. 먼저, 분해 될 매트릭스는 2 각형으로 축소된다. LAPACK에서 이진 형태로 축소하는 데 사용되는 알고리즘은 Lawson-Hanson-Chan 알고리즘 일 수 있으며 한 시점에서 QR 인수 분해를 사용합니다. Trefethen과 Bau의 Numerical Linear Algebra 강의 31 은이 과정에 대한 개요를 제공합니다. 그런 다음 xGESDD
나누기 및 정복 알고리즘을 사용하여 2 각형 행렬에서 특이 값과 왼쪽 및 오른쪽 특이 벡터를 계산합니다. 이 단계에 대한 배경 지식을 얻으려면 Golub and Van Loan의 Matrix Computations 또는 Jim Demmel의 Applied Numerical Linear Algebra 를 참조하십시오 .
마지막으로 특이 값과 고유 값을 혼동해서는 안됩니다 . 이 두 세트의 수량은 동일하지 않습니다. SVD는 행렬의 특이 값을 계산합니다. MATLAB 을 사용한 Cleve Moler의 Numerical Computing 은 특이 값과 고유 값의 차이점에 대한 훌륭한 개요를 제공합니다 . 일반적으로 정규 행렬 의 경우를 제외하고 주어진 행렬의 특이 값과 고유 값 사이에는 명백한 관계가 없습니다 . 단수 값은 고유 값의 절대 값입니다.
dgesdd
실제 가치 SVD에 Lapack 루틴 을 사용합니다 . 따라서 귀하의 실제 질문은 아마도 "Lapack dgesdd는 어떻게 작동합니까?"일 것입니다.