Для этого я вычисляю ее SVD, используя метод Класс Eigen::JacobiSvd (Изменить: передать ComputeFullV в качестве параметра). У него есть функция SingleValues, которая возвращает вектор с сингулярными значениями матрицы.
РЕДАКТИРОВАТЬ: мне конкретно нужен ортонормированный базис, который SVD гарантирует по умолчанию, в то время как другие виды разложений не обязательно.
Проблема в том, что он возвращает только ненулевые значения, а меня интересуют нулевые значения (и какие сингулярные векторы им соответствуют) для вычисления пустое пространство. Есть ли способ также получить нулевые значения, чтобы найти соответствующие им столбцы?
Я искал в документации Eigen класс JacobiSvd, чтобы найти дополнительную информацию о его функции-члене, но не удалось найти. Я смотрел не туда?
Редактировать 2: это функция, которую я использую:
Код: Выделить всё
Eigen::MatrixXd nullspace(const Eigen::MatrixXd& mat, double tol = 1e-5) {
// Perform SVD
Eigen::JacobiSVD svd(mat, Eigen::ComputeFullU | Eigen::ComputeFullV);
// Get the singular values
Eigen::VectorXd singularValues = svd.singularValues();
// debug
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78754772/c-eigen-svd-singularvalues-returns-only-the-nonzero-ones-how-do-i-get-the-z[/url]