Spec-Zone.ru › Eigen3

Eigen::ColPivHouseholderQR

template<typename _MatrixType>
class Eigen::ColPivHouseholderQR< _MatrixType >

Разложение QR с выбором столбцов Холецкого матрицы, позволяющее определить ранг.

Параметры шаблона
_MatrixType тип матрицы, для которой вычисляется разложение QR

Этот класс выполняет разложение QR с выбором столбцов матрицы A на матрицы P, Q и R таким образом, что

\[ \mathbf{A} \, \mathbf{P} = \mathbf{Q} \, \mathbf{R} \]

используя преобразования Холецкого. Здесь P — матрица перестановки, Q — унитарная матрица, а R — верхняя треугольная матрица.

Это разложение выполняет выбор столбцов, чтобы определить ранг и улучшить числовую устойчивость. Оно медленнее, чем HouseholderQR, и быстрее, чем FullPivHouseholderQR.

Этот класс поддерживает механизм неразрушающего разложения.

См. также
MatrixBase::colPivHouseholderQr()
Inheritance graph
MatrixType::RealScalar absDeterminant () const
ColPivHouseholderQR ()
Конструктор по умолчанию. Подробнее...
template<typename InputType >
ColPivHouseholderQR (const EigenBase< InputType > &matrix)
Строит QR-разложение из заданной матрицы. Подробнее...
template<typename InputType >
ColPivHouseholderQR (EigenBase< InputType > &matrix)
Строит QR-разложение из заданной матрицы. Подробнее...
ColPivHouseholderQR (Index rows, Index cols)
Конструктор по умолчанию с предварительной выделенной памятью. Подробнее...
const PermutationType & colsPermutation () const
template<typename InputType >
ColPivHouseholderQR< MatrixType > & compute (const EigenBase< InputType > &matrix)
Index dimensionOfKernel () const
const HCoeffsType & hCoeffs () const
HouseholderSequenceType householderQ () const
ComputationInfo info () const
Указывает, было ли выполнено QR-разложение успешно. Подробнее...
const Inverse< ColPivHouseholderQR > inverse () const
bool isInjective () const
bool isInvertible () const
bool isSurjective () const
MatrixType::RealScalar logAbsDeterminant () const
const MatrixType & matrixQR () const
const MatrixType & matrixR () const
RealScalar maxPivot () const
Index nonzeroPivots () const
Index rank () const
ColPivHouseholderQR & setThreshold (const RealScalar &threshold)
ColPivHouseholderQR & setThreshold (Default_t)
template<typename Rhs >
const Solve< ColPivHouseholderQR, Rhs > solve (const MatrixBase< Rhs > &b) const
RealScalar threshold () const
- Публичные члены, унаследованные от Eigen::SolverBase< ColPivHouseholderQR< _MatrixType > >
AdjointReturnType adjoint () const
ColPivHouseholderQR< _MatrixType > & derived ()
const ColPivHouseholderQR< _MatrixType > & derived () const
const Solve< ColPivHouseholderQR< _MatrixType >, Rhs > solve (const MatrixBase< Rhs > &b) const
SolverBase ()
ConstTransposeReturnType transpose () const
- Публичные члены, унаследованные от Eigen::EigenBase< Derived >
EIGEN_CONSTEXPR Index cols () const EIGEN_NOEXCEPT
Derived & derived ()
const Derived & derived () const
EIGEN_CONSTEXPR Index rows () const EIGEN_NOEXCEPT
EIGEN_CONSTEXPR Index size () const EIGEN_NOEXCEPT
- Общедоступные типы, унаследованные от Eigen::EigenBase< Derived >
typedef Eigen::Index Index
Тип интерфейса индексов. Подробнее...

ColPivHouseholderQR() [1/4]

template<typename _MatrixType >
Eigen::ColPivHouseholderQR< _MatrixType >::ColPivHouseholderQR ( )
inline

Конструктор по умолчанию.

Конструктор по умолчанию полезен в тех случаях, когда пользователь намерен выполнить разложение с помощью ColPivHouseholderQR::compute(const MatrixType&).

ColPivHouseholderQR() [2/4]

template<typename _MatrixType >
Eigen::ColPivHouseholderQR< _MatrixType >::ColPivHouseholderQR ( Index rows,
Index cols
)
inline

Конструктор по умолчанию с предварительной выделением памяти.

Аналогично конструктору по умолчанию, но с предварительным выделением внутренней памяти в соответствии с заданным размером задачи.

См. также
ColPivHouseholderQR()

ColPivHouseholderQR() [3/4]

template<typename _MatrixType >
template<typename InputType >
Eigen::ColPivHouseholderQR< _MatrixType >::ColPivHouseholderQR ( const EigenBase< InputType > & matrix )
inlineexplicit

Создаёт разложение QR из заданной матрицы.

Этот конструктор вычисляет разложение QR матрицы matrix, вызывая метод compute(). Это сокращение для:

ColPivHouseholderQR<MatrixType> qr(matrix.rows(), matrix.cols());
qr.compute(matrix);
См. также
compute()

ColPivHouseholderQR() [4/4]

template<typename _MatrixType >
template<typename InputType >
Eigen::ColPivHouseholderQR< _MatrixType >::ColPivHouseholderQR ( EigenBase< InputType > & matrix )
inlineexplicit

Создаёт разложение QR из заданной матрицы.

Этот перегруженный конструктор предоставляется для неразрушающего разложения, когда MatrixType является Eigen::Ref.

См. также
ColPivHouseholderQR(const EigenBase&)

absDeterminant()

template<typename MatrixType >
MatrixType::RealScalar Eigen::ColPivHouseholderQR< MatrixType >::absDeterminant
Возвращает
модуль определителя матрицы, для которой *this является разложением QR. Она имеет только линейную сложность (то есть O(n), где n — размер квадратной матрицы), так как разложение QR уже вычислено.
Примечание
Только для квадратных матриц.
Предупреждение
определитель может быть очень большим или очень малым, поэтому для матриц достаточно большого размера существует риск переполнения/потери точности. Одним из способов обойти это — использовать logAbsDeterminant() вместо этого.
См. также
logAbsDeterminant(), MatrixBase::determinant()

colsPermutation()

template<typename _MatrixType >
const PermutationType& Eigen::ColPivHouseholderQR< _MatrixType >::colsPermutation ( ) const
inline
Возвращает
ссылку на матрицу перестановки столбцов

compute()

template<typename _MatrixType >
template<typename InputType >
ColPivHouseholderQR<MatrixType>& Eigen::ColPivHouseholderQR< _MatrixType >::compute ( const EigenBase< InputType > & matrix )

Выполняет разложение QR заданной матрицы matrix. Результат разложения сохраняется в *this, и ссылка на *this возвращается.

См. также
класс ColPivHouseholderQR, ColPivHouseholderQR(const MatrixType&)

dimensionOfKernel()

template<typename _MatrixType >
Index Eigen::ColPivHouseholderQR< _MatrixType >::dimensionOfKernel ( ) const
inline
Возвращает
размер ядра матрицы, для которой *this является разложением QR.
Примечание
Этот метод должен определить, какие главные элементы должны рассматриваться как ненулевые. Для этого он использует пороговое значение, которое вы можете контролировать, вызывая setThreshold(const RealScalar&).

hCoeffs()

template<typename _MatrixType >
const HCoeffsType& Eigen::ColPivHouseholderQR< _MatrixType >::hCoeffs ( ) const
inline
Возвращает
ссылку на вектор коэффициентов Хаусхолдера, используемых для представления фактора Q.

Только для продвинутых пользователей.

householderQ()

template<typename MatrixType >
ColPivHouseholderQR< MatrixType >::HouseholderSequenceType Eigen::ColPivHouseholderQR< MatrixType >::householderQ
Возвращает
матрицу Q как последовательность преобразований Хаусхолдера. Вы можете извлечь значимую часть только с помощью:
qr.householderQ().setLength(qr.nonzeroPivots()) 

info()

template<typename _MatrixType >
ComputationInfo Eigen::ColPivHouseholderQR< _MatrixType >::info ( ) const
inline

Сообщает, было ли разложение QR выполнено успешно.

Примечание
Эта функция всегда возвращает Success. Она предоставляется для совместимости с другими процедурами факторизации.
Возвращает
Success

inverse()

template<typename _MatrixType >
const Inverse<ColPivHouseholderQR> Eigen::ColPivHouseholderQR< _MatrixType >::inverse ( ) const
inline
Возвращает
обратную матрицу, для которой *this является разложением QR.
Примечание
Если эта матрица необратима, возвращаемая матрица имеет неопределённые коэффициенты. Сначала используйте isInvertible(), чтобы определить, обратима ли эта матрица.

isInjective()

template<typename _MatrixType >
bool Eigen::ColPivHouseholderQR< _MatrixType >::isInjective ( ) const
inline
Возвращает
true, если матрица, для которой *this является QR-разложением, представляет инъективное линейное отображение, т. е. имеет тривиальное ядро; в противном случае — false.
Примечание
Данный метод должен определить, какие главные элементы следует считать ненулевыми. Для этого используется порог, который можно контролировать, вызвав setThreshold(const RealScalar&).

isInvertible()

template<typename _MatrixType >
bool Eigen::ColPivHouseholderQR< _MatrixType >::isInvertible ( ) const
inline
Возвращает
true, если матрица, для которой *this является QR-разложением, обратима.
Примечание
Данный метод должен определить, какие главные элементы следует считать ненулевыми. Для этого используется порог, который можно контролировать, вызвав setThreshold(const RealScalar&).

isSurjective()

template<typename _MatrixType >
bool Eigen::ColPivHouseholderQR< _MatrixType >::isSurjective ( ) const
inline
Возвращает
true, если матрица, для которой *this является QR-разложением, представляет сюръективное линейное отображение; в противном случае — false.
Примечание
Данный метод должен определить, какие главные элементы следует считать ненулевыми. Для этого используется порог, который можно контролировать, вызвав setThreshold(const RealScalar&).

logAbsDeterminant()

template<typename MatrixType >
MatrixType::RealScalar Eigen::ColPivHouseholderQR< MatrixType >::logAbsDeterminant
Возвращает
натуральный логарифм абсолютного значения определителя матрицы, для которой *this является QR-разложением. Имеет линейную сложность (т. е. O(n), где n — размер квадратной матрицы), так как QR-разложение уже вычислено.
Примечание
Только для квадратных матриц.
Этот метод полезен для работы с риском переполнения/потерь точности при вычислении определителя.
См. также
absDeterminant(), MatrixBase::determinant()

matrixQR()

template<typename _MatrixType >
const MatrixType& Eigen::ColPivHouseholderQR< _MatrixType >::matrixQR ( ) const
inline
Возвращает
ссылку на матрицу, где хранится QR-разложение Холецкого

matrixR()

template<typename _MatrixType >
const MatrixType& Eigen::ColPivHouseholderQR< _MatrixType >::matrixR ( ) const
inline
Возвращает
ссылку на матрицу, где хранится результат QR-разложения Холецкого
Предупреждение
Строго нижняя часть этой матрицы содержит внутренние значения. Должна ссылаться только на верхнюю треугольную часть. Для получения используйте
matrixR().template triangularView<Upper>() 
. Для матриц с недостатком ранга используйте
matrixR().topLeftCorner(rank(), rank()).template triangularView<Upper>()
.

maxPivot()

template<typename _MatrixType >
RealScalar Eigen::ColPivHouseholderQR< _MatrixType >::maxPivot ( ) const
inline
Возвращает
абсолютное значение наибольшего главного элемента, т. е. наибольшего диагонального коэффициента R.

nonzeroPivots()

template<typename _MatrixType >
Index Eigen::ColPivHouseholderQR< _MatrixType >::nonzeroPivots ( ) const
inline
Возвращает
количество ненулевых главных элементов в QR-разложении. Здесь ненулевой понимается в точном смысле, а не в смысле приближенного значения. Понятие не является в некотором смысле принципиально интересным, но все же полезно при реализации алгоритмов.
См. также
rank()

rank()

template<typename _MatrixType >
Index Eigen::ColPivHouseholderQR< _MatrixType >::rank ( ) const
inline
Возвращает
ранг матрицы, для которой *this является QR-разложением.
Примечание
Данный метод должен определить, какие главные элементы следует считать ненулевыми. Для этого используется порог, который можно контролировать, вызвав setThreshold(const RealScalar&).

setThreshold() [1/2]

template<typename _MatrixType >
ColPivHouseholderQR& Eigen::ColPivHouseholderQR< _MatrixType >::setThreshold ( const RealScalar & threshold )
inline

Позволяет задать порог, который будет использоваться некоторыми методами, такими как rank(), которым необходимо определить, когда главные элементы следует считать ненулевыми. Это не используется для самого QR-разложения.

При необходимости получения значения порога, Eigen вызывает threshold(). По умолчанию используется формула для автоматического определения разумного порога. После вызова данного метода setThreshold(const RealScalar&) используется ваше значение вместо него.

Параметры
threshold Новое значение, используемое в качестве порога.

Главный элемент будет считаться ненулевым, если его абсолютное значение строго больше \( \vert pivot \vert \leqslant threshold \times \vert maxpivot \vert \), где maxpivot — наибольший главный элемент.

Чтобы вернуться к поведению по умолчанию, вызовите setThreshold(Default_t)

setThreshold() [2/2]

template<typename _MatrixType >
ColPivHouseholderQR& Eigen::ColPivHouseholderQR< _MatrixType >::setThreshold ( Default_t )
inline

Позволяет вернуться к поведению по умолчанию, позволяя Eigen использовать собственную формулу для определения порога.

В качестве параметра следует передать специальный объект Eigen::Default.

qr.setThreshold(Eigen::Default); 

См. документацию setThreshold(const RealScalar&).

solve()

template<typename _MatrixType >
template<typename Rhs >
const Solve<ColPivHouseholderQR, Rhs> Eigen::ColPivHouseholderQR< _MatrixType >::solve ( const MatrixBase< Rhs > & b ) const
inline

Этот метод находит решение x для уравнения Ax=b, где A — матрица, QR-разложение которой представлено данным объектом, если такое решение существует.

Параметры
b правая часть уравнения, которое требуется решить.
Возвращаемое значение
решение.

Этот метод просто пытается найти наилучшее возможное решение. Если вы хотите проверить, существует ли решение или оно точное, просто вызовите эту функцию, чтобы получить результат, а затем вычислите ошибку этого результата или используйте MatrixBase::isApprox() напрямую, например, так:

bool a_solution_exists = (A*result).isApprox(b, precision); 

Этот метод избегает деления на ноль, поэтому отсутствие решения само по себе не означает, что вы получите inf или nan значения.

Если существует более одного решения, этот метод произвольно выберет одно.

Пример:

Matrix3f m = Matrix3f::Random();
Matrix3f y = Matrix3f::Random();
cout << "Here is the matrix m:" << endl << m << endl;
cout << "Here is the matrix y:" << endl << y << endl;
Matrix3f x;
x = m.colPivHouseholderQr().solve(y);
assert(y.isApprox(m*x));
cout << "Here is a solution x to the equation mx=y:" << endl << x << endl;

Вывод:

Here is the matrix m:
  0.68  0.597  -0.33
-0.211  0.823  0.536
 0.566 -0.605 -0.444
Here is the matrix y:
  0.108   -0.27   0.832
-0.0452  0.0268   0.271
  0.258   0.904   0.435
Here is a solution x to the equation mx=y:
 0.609   2.68   1.67
-0.231  -1.57 0.0713
  0.51   3.51   1.05

threshold()

template<typename _MatrixType >
RealScalar Eigen::ColPivHouseholderQR< _MatrixType >::threshold ( ) const
inline

Возвращает порог, который будет использоваться некоторыми методами, такими как rank().

См. документацию к setThreshold(const RealScalar&).


The documentation for this class was generated from the following file:
  • ColPivHouseholderQR.h

© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1ColPivHouseholderQR.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API