Spec-Zone.ru › Eigen3

Eigen::FullPivHouseholderQR

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

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

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

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

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

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

Это разложение выполняет очень осторожный полный поворот, чтобы раскрыть ранг и обеспечить оптимальную числовую устойчивость. Цена этого — более низкая скорость по сравнению с HouseholderQR и ColPivHouseholderQR.

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

См. также
MatrixBase::fullPivHouseholderQr()
Inheritance graph
MatrixType::RealScalar absDeterminant () const
const PermutationType & colsPermutation () const
template<typename InputType >
FullPivHouseholderQR< MatrixType > & compute (const EigenBase< InputType > &matrix)
Index dimensionOfKernel () const
FullPivHouseholderQR ()
Конструктор по умолчанию. Подробнее...
template<typename InputType >
FullPivHouseholderQR (const EigenBase< InputType > &matrix)
Создаёт разложение QR из заданной матрицы. Подробнее...
template<typename InputType >
FullPivHouseholderQR (EigenBase< InputType > &matrix)
Создаёт разложение QR из заданной матрицы. Подробнее...
FullPivHouseholderQR (Index rows, Index cols)
Конструктор по умолчанию с предварительным выделением памяти. Подробнее...
const HCoeffsType & hCoeffs () const
const Inverse< FullPivHouseholderQR > inverse () const
bool isInjective () const
bool isInvertible () const
bool isSurjective () const
MatrixType::RealScalar logAbsDeterminant () const
MatrixQReturnType matrixQ (void) const
const MatrixType & matrixQR () const
RealScalar maxPivot () const
Index nonzeroPivots () const
Index rank () const
const IntDiagSizeVectorType & rowsTranspositions () const
FullPivHouseholderQR & setThreshold (const RealScalar &threshold)
FullPivHouseholderQR & setThreshold (Default_t)
template<typename Rhs >
const Solve< FullPivHouseholderQR, Rhs > solve (const MatrixBase< Rhs > &b) const
RealScalar threshold () const
- Public Члены-функции унаследованные от Eigen::SolverBase< FullPivHouseholderQR< _MatrixType > >
AdjointReturnType adjoint () const
FullPivHouseholderQR< _MatrixType > & derived ()
const FullPivHouseholderQR< _MatrixType > & derived () const
const Solve< FullPivHouseholderQR< _MatrixType >, Rhs > solve (const MatrixBase< Rhs > &b) const
SolverBase ()
ConstTransposeReturnType transpose () const
- Public Члены-функции унаследованные от 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
- Public Типы унаследованные от Eigen::EigenBase< Derived >
typedef Eigen::Index Index
Тип индексов интерфейса. Подробнее...

FullPivHouseholderQR() [1/4]

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

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

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

FullPivHouseholderQR() [2/4]

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

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

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

См. также
FullPivHouseholderQR()

FullPivHouseholderQR() [3/4]

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

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

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

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

FullPivHouseholderQR() [4/4]

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

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

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

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

absDeterminant()

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

colsPermutation()

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

compute()

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

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

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

dimensionOfKernel()

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

hCoeffs()

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

Только для продвинутого использования.

inverse()

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

isInjective()

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

isInvertible()

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

isSurjective()

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

logAbsDeterminant()

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

matrixQ()

template<typename MatrixType >
FullPivHouseholderQR< MatrixType >::MatrixQReturnType Eigen::FullPivHouseholderQR< MatrixType >::matrixQ ( void ) const
inline
Возвращает
Объект выражения, представляющий матрицу Q

matrixQR()

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

maxPivot()

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

nonzeroPivots()

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

rank()

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

rowsTranspositions()

template<typename _MatrixType >
const IntDiagSizeVectorType& Eigen::FullPivHouseholderQR< _MatrixType >::rowsTranspositions ( ) const
inline
Возвращает
постоянную ссылку на вектор индексов, представляющих транспозиции строк

setThreshold() [1/2]

template<typename _MatrixType >
FullPivHouseholderQR& Eigen::FullPivHouseholderQR< _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 >
FullPivHouseholderQR& Eigen::FullPivHouseholderQR< _MatrixType >::setThreshold ( Default_t )
inline

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

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

qr.setThreshold(Eigen::Default); 

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

solve()

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

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

Параметры
b правая часть уравнения, которое нужно решить.
Возвращает
точное или наименьшее-квадратичное решение, если ранг больше или равен количеству столбцов A, и произвольное решение в противном случае.

Этот метод просто пытается найти наилучшее возможное решение. Если вы хотите проверить, существует ли решение или оно точное, просто вызовите эту функцию, чтобы получить результат, а затем вычислите ошибку этого результата или используйте 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.fullPivHouseholderQr().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::FullPivHouseholderQR< _MatrixType >::threshold ( ) const
inline

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

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


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

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

Spec-Zone.ru

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