У вашому запитанні є ряд питань.
Не використовуйте Гауссова елімінація (LU-факторизація) для обчислення числового рангу матриці. LU-факторизація для цієї мети недостовірна в арифметиці з плаваючою комою. Замість цього використовуйте ранг розкривається QR розкладання (наприклад, xGEQPX
чи xGEPQY
в LAPACK, де х C, D, S або Z, хоча ці процедури важко відстежити, см відповідь JedBrown на пов'язаний з цим питання ), або використовувати СВД (сингулярне розкладання значення, таке як xGESDD
або xGESVD
, де x знову C, D, S або Z). SVD - більш точний, надійний алгоритм для визначення числового рангу, але він вимагає більше операцій з плаваючою комою.
Однак для вирішення лінійної системи факторизація LU (з частковим поворотом, що є стандартною реалізацією в LAPACK) є надзвичайно надійною на практиці. Існують деякі патологічні випадки, коли факторизація LU з частковим поворотом нестабільна (див. Лекцію 22 у числовій лінійній алгебрівід Трефетена та Бау для деталей). QR-факторизація - це більш стабільний чисельний алгоритм для розв’язання лінійних систем, імовірно, тому він дає вам такі точні результати. Однак, для квадратних матриць потрібні більше операцій з плаваючою комою, ніж LU-коефіцієнт (коефіцієнт 2) (я вважаю, що JackPoulson може мене виправити на цьому). Для прямокутних систем QR-факторизація є кращим вибором, оскільки вона дасть рішення з найменшими квадратами для занадто визначених лінійних систем. SVD також можна використовувати для вирішення лінійних систем, але це буде дорожче, ніж QR-факторизація.
janneb вірно, що numpy.linalg.svd є обгорткою xGESDD
в LAPACK. Сингулярні декомпозиції величин проходять у два етапи. По-перше, матриця, що розкладається, зводиться до бідіагональної форми. Алгоритм, який використовується для приведення до бідіагональної форми в LAPACK, ймовірно, алгоритм Лоусона-Хансона-Чана, і він використовує QR-факторизацію в один момент. Лекція 31 з числової лінійної алгебри Трефетена та Бау дає огляд цього процесу. Потім xGESDD
використовує алгоритм ділення і перемоги для обчислення значень сингулярності та лівого та правого сингулярних векторів з бідіагональної матриці. Щоб ознайомитись з цим кроком, вам потрібно буде проконсультуватися з матричними обчисленнями Голуба та Вану Кредита, або з прикладною числовою лінійною алгеброю Джима Деммеля.
Нарешті, не слід плутати однинні значення з власними значеннями . Ці два набори величин неоднакові. SVD обчислює сингулярні значення матриці. Числові обчислення Cleve Moler з MATLAB дає хороший огляд відмінностей між сингулярними значеннями та власними значеннями . Взагалі немає очевидного зв’язку між сингулярними значеннями даної матриці та її власними значеннями, за винятком звичайних матриць, де сингулярні значення є абсолютним значенням власних значень.
dgesdd
для справжніх цінних SVD. Отже, ваше справжнє запитання, ймовірно, "як працює Lapack dgesdd?", І це зовсім не тема для stackoverflow.