с использованием преобразований Хаусхолдера. Здесь P — матрица перестановок, Q и Z — унитарные матрицы, а T — верхняя треугольная матрица размера ранг-на-ранг. A может иметь недостаток ранга.
Конструктор по умолчанию полезен в тех случаях, когда пользователь намерен выполнять разложения с помощью CompleteOrthogonalDecomposition::compute(const* MatrixType&).
Создаёт полное ортогональное разложение из заданной матрицы.
Этот конструктор вычисляет полное ортогональное разложение матрицы матрица, вызывая метод compute(). Будет использоваться значение порога по умолчанию для определения ранга. Это краткая форма:
абсолютное значение определителя матрицы, для которой *this — полное ортогональное разложение. Оно имеет линейную сложность (то есть O(n), где n — размерность квадратной матрицы), так как полное ортогональное разложение уже вычислено.
Примечание
Только для квадратных матриц.
Предупреждение
определитель может быть очень большим или очень маленьким, поэтому для матриц достаточно большого размера существует риск переполнения/потерь точности. Один из способов обойти это — использовать logAbsDeterminant() вместо него.
размерность ядра матрицы, для которой *this — полное ортогональное разложение.
Примечание
Этот метод должен определить, какие главные элементы следует считать отличными от нуля. Для этого используется значение порога, которое можно контролировать, вызвав setThreshold(const RealScalar&).
true, если матрица, для которой *this является разложением, представляет инъективное линейное отображение, т. е. имеет тривиальное ядро; иначе false.
Примечание
Данному методу необходимо определить, какие главные элементы следует считать отличными от нуля. Для этого используется пороговое значение, которое можно контролировать, вызвав setThreshold(const RealScalar&).
true, если матрица, для которой *this является полным ортогональным разложением, обратима.
Примечание
Данному методу необходимо определить, какие главные элементы следует считать отличными от нуля. Для этого используется пороговое значение, которое можно контролировать, вызвав setThreshold(const RealScalar&).
true, если матрица, для которой *this является разложением, представляет сюръективное линейное отображение; иначе false.
Примечание
Данному методу необходимо определить, какие главные элементы следует считать отличными от нуля. Для этого используется пороговое значение, которое можно контролировать, вызвав setThreshold(const RealScalar&).
натуральный логарифм абсолютного значения определителя матрицы, для которой *this является полным ортогональным разложением. Имеет только линейную сложность (т. е. O(n), где n — размерность квадратной матрицы), так как полное ортогональное разложение уже вычислено.
Примечание
Только для квадратных матриц.
Этот метод полезен для работы с риском переполнения/потери точности при вычислении определителя.
количество ненулевых главных элементов в полном ортогональном разложении. Здесь ненулевой понимается в точном смысле, а не в приближенном. Хотя это понятие само по себе не очень интересно, но оно полезно при реализации алгоритмов.
ранг матрицы, для которой *this является полным ортогональным разложением.
Примечание
Данному методу необходимо определить, какие главные элементы следует считать ненулевыми. Для этого используется пороговое значение, которое можно контролировать, вызвав setThreshold(const RealScalar&).
Позволяет задать порог, используемый определенными методами, такими как rank(), которым необходимо определить, когда главные элементы следует считать ненулевыми. Должен быть вызван перед вызовом compute().
При необходимости получения значения порога, Eigen вызывает threshold(). По умолчанию используется формула для автоматического определения разумного порога. После вызова данного метода setThreshold(const RealScalar&) будет использоваться ваше значение.
Параметры
threshold
Новое значение для порога.
Главный элемент будет считаться ненулевым, если его абсолютное значение строго больше, чем \( \vert pivot \vert \leqslant threshold \times \vert maxpivot \vert \), где maxpivot — наибольший главный элемент.