template<typename Derived> class Eigen::SVDBase< Derived >
Базовый класс алгоритмов SVD.
Параметры шаблона
Derived
тип фактического разложения SVD
Разложение SVD заключается в разложении любой n-by-p матрицы A в виде произведения
\[ A = U S V^* \]
где U — унитарная n-by-n матрица, V — унитарная p-by-p матрица, а S — вещественная положительная n-by-p матрица, которая равна нулю вне главной диагонали; диагональные элементы S известны как сингулярныезначенияA, а столбцы U и V известны как левые и правые сингулярныевекторыA соответственно.
Сингулярные значения всегда упорядочены по убыванию.
Вы можете запросить вычисление только тонкихU или V, что означает следующее. В случае прямоугольной n-by-p матрицы, если m — меньшее значение среди n и p, существует только m сингулярных векторов; оставшиеся столбцы U и V не соответствуют фактическим сингулярным векторам. Запрос тонкихU или V означает запрос на формирование только их первых m столбцов. Таким образом, U является тогда n-by-m матрицей, а V — p-by-m матрицей. Заметьте, что тонкие U и V — это все, что вам нужно для решения (методом наименьших квадратов).
Состояние вычисления может быть получено с помощью метода info(). Если info() не возвращает Success, результаты не следует считать корректно определенными.
Если входная матрица имеет коэффициенты inf или nan, результат вычисления не определен, и info() вернет InvalidInput, но гарантируется, что вычисление завершится за конечное (и разумное) время.
Для разложения SVD матрицы n×p, пусть m — минимальное из n и p, матрица U имеет размер n×n, если вы запросили ComputeFullU , и размер n×m, если вы запросили ComputeThinU .
Первые m столбцов матрицы U — левые сингулярные векторы разлагаемой матрицы.
Этот метод проверяет, что вы запросили вычисление U.
Для разложения SVD матрицы n×p, пусть m — минимальное из n и p, матрица V имеет размер p×p, если вы запросили ComputeFullV , и размер p×m, если вы запросили ComputeThinV .
Первые m столбцов матрицы V — правые сингулярные векторы разлагаемой матрицы.
Этот метод проверяет, что вы запросили вычисление V.
ранг матрицы, для которой *this является разложением SVD.
Примечание
Этот метод должен определить, какие сингулярные значения следует считать ненулевыми. Для этого используется порог, который вы можете контролировать, вызвав setThreshold(const RealScalar&).
Позволяет задать порог, который будут использовать некоторые методы, такие как rank() и solve(), которым необходимо определить, когда сингулярные значения следует считать ненулевыми. Это не используется для самого разложения SVD.
При необходимости получения значения порога, Eigen вызывает threshold(). По умолчанию NumTraits<Scalar>::epsilon()
Параметры
threshold
Новое значение порога.
Сингулярное значение будет считаться ненулевым, если его значение строго больше \( \vert singular value \vert \leqslant threshold \times \vert max singular value \vert \).
Для разложения SVD матрицы n×p, пусть m — минимальное из n и p, возвращаемый вектор имеет размер m. Сингулярные значения всегда отсортированы по убыванию.
решение (методом наименьших квадратов) уравнения \( A x = b \) с использованием текущего разложения SVD матрицы A.
Параметры
b
правая часть уравнения, которое нужно решить.
Примечание
Для решения требуются вычисления как U, так и V. Тонких U и V достаточно, полные U и V не нужны.
Решение SVD неявно является решением методом наименьших квадратов. Таким образом, этот метод служит для решения как точных уравнений, так и уравнений методом наименьших квадратов. Другими словами, возвращаемое решение гарантированно минимизирует евклидову норму \( \Vert A x - b \Vert \).