W twoim pytaniu jest wiele problemów.
Nie używaj eliminacji Gaussa (faktoryzacja LU), aby obliczyć liczbową pozycję macierzy. Faktoryzacja LU jest w tym celu zawodna w arytmetyki zmiennoprzecinkowej. Zamiast tego zastosuj rozkład QR ujawniający rangę (taki jak xGEQPXlub xGEPQYw LAPACK, gdzie x to C, D, S lub Z, chociaż te procedury są trudne do wyśledzenia; zobacz odpowiedź JedBrown na powiązane pytanie ) lub użyj SVD (rozkład wartości w liczbie pojedynczej, taki jak xGESDDlub xGESVD, gdzie x oznacza ponownie C, D, S lub Z). SVD jest bardziej dokładnym, niezawodnym algorytmem do określania rangi numerycznej, ale wymaga większej liczby operacji zmiennoprzecinkowych.
Jednak w przypadku rozwiązania układu liniowego faktoryzacja LU (z częściowym obrotem, co jest standardową implementacją w LAPACK) jest wyjątkowo niezawodna w praktyce. Istnieją pewne przypadki patologiczne, w których rozkład na czynniki pierwsze z częściowym przestawieniem jest niestabilny (patrz Wykład 22 w Numerycznej algebrze liniowej)Trefethen i Bau w celu uzyskania szczegółowych informacji). Faktoryzacja QR jest bardziej stabilnym algorytmem numerycznym do rozwiązywania układów liniowych i prawdopodobnie dlatego daje tak precyzyjne wyniki. Wymaga to jednak więcej operacji zmiennoprzecinkowych niż faktoryzacja LU o współczynnik 2 dla macierzy kwadratowych (wierzę; JackPoulson może mnie w tym poprawić). W przypadku systemów prostokątnych lepszym wyborem jest faktoryzacja QR, ponieważ pozwoli ona uzyskać rozwiązania najmniejszych kwadratów w przypadku przesadnie określonych systemów liniowych. SVD może być również stosowany do rozwiązywania układów liniowych, ale będzie droższy niż faktoryzacja QR.
janneb ma rację, że numpy.linalg.svd jest opakowaniem xGESDDw LAPACK. Rozkłady poszczególnych wartości przebiegają w dwóch etapach. Po pierwsze, matryca, która ma zostać rozłożona, jest redukowana do postaci dwu- kątnej. Algorytmem zastosowanym w LAPACK jest redukcja do postaci dwukierunkowej, prawdopodobnie jest to algorytm Lawsona-Hansona-Chana, który w pewnym momencie wykorzystuje faktoryzację QR. Wykład 31 w Numerycznej algebrze liniowej autorstwa Trefethena i Baua zawiera przegląd tego procesu. Następnie xGESDDużywa algorytmu dziel i zwyciężaj, aby obliczyć wartości osobliwe oraz lewe i prawe wektory osobliwe na podstawie macierzy dwukierunkowej. Aby uzyskać informacje na temat tego kroku, musisz skonsultować obliczenia macierzowe Goluba i Van Loana lub stosowaną numeryczną algebrę liniową autorstwa Jima Demmela.
Wreszcie, nie należy mylić wartości pojedynczych z wartościami własnymi . Te dwa zestawy wielkości nie są takie same. SVD oblicza pojedyncze wartości macierzy. Obliczenia numeryczne Cleve Moler za pomocą MATLAB dają ładny przegląd różnic między wartościami osobliwymi a wartościami własnymi . Zasadniczo nie ma oczywistej zależności między wartościami osobliwymi danej macierzy a jej wartościami własnymi, z wyjątkiem macierzy normalnych , gdzie wartości osobliwe są wartością bezwzględną wartości własnych.
dgesddLapacka w przypadku SVD o wartościach rzeczywistych. Tak więc twoje prawdziwe pytanie brzmi prawdopodobnie: „jak działa Lapack dgesdd?”, I to jest dość nie na temat przepełnienia stosu.