Spec-Zone.ru › Eigen3

Eigen::HouseholderQR

шаблон<typename _MatrixType>
класс Eigen::HouseholderQR< _MatrixType >

Разложение Холецкого QR матрицы.

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

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

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

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

Обратите внимание, что поворот не выполняется. Это не разложение, показывающее ранг. Если вам нужна эта функция, используйте FullPivHouseholderQR или ColPivHouseholderQR вместо этого.

Это разложение Холецкого QR быстрее, но менее численно устойчиво и менее функционально, чем FullPivHouseholderQR или ColPivHouseholderQR.

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

См. также
MatrixBase::householderQr()
Inheritance graph
MatrixType::RealScalar absDeterminant () const
const HCoeffsType & hCoeffs () const
HouseholderSequenceType householderQ () const
HouseholderQR ()
Конструктор по умолчанию. Подробнее...
шаблон<typename InputType >
HouseholderQR (const EigenBase< InputType > &matrix)
Создает факторизацию QR из заданной матрицы. Подробнее...
шаблон<typename InputType >
HouseholderQR (EigenBase< InputType > &matrix)
Создает факторизацию QR из заданной матрицы. Подробнее...
HouseholderQR (Index rows, Index cols)
Конструктор по умолчанию с предварительной выделением памяти. Подробнее...
MatrixType::RealScalar logAbsDeterminant () const
const MatrixType & matrixQR () const
шаблон<typename Rhs >
const Solve< HouseholderQR, Rhs > solve (const MatrixBase< Rhs > &b) const
- Публичные члены-функции унаследованы от Eigen::SolverBase< HouseholderQR< _MatrixType > >
AdjointReturnType adjoint () const
HouseholderQR< _MatrixType > & derived ()
const HouseholderQR< _MatrixType > & derived () const
const Solve< HouseholderQR< _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
void computeInPlace ()
- Публичные типы, унаследованные от Eigen::EigenBase< Derived >
typedef Eigen::Index Index
Тип индексов интерфейса. Подробнее...

HouseholderQR() [1/4]

шаблон<typename _MatrixType >
Eigen::HouseholderQR< _MatrixType >::HouseholderQR ( )
inline

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

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

HouseholderQR() [2/4]

шаблон<typename _MatrixType >
Eigen::HouseholderQR< _MatrixType >::HouseholderQR ( Index rows,
Index cols
)
inline

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

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

См. также
HouseholderQR()

HouseholderQR() [3/4]

шаблон<typename _MatrixType >
шаблон<typename InputType >
Eigen::HouseholderQR< _MatrixType >::HouseholderQR ( const EigenBase< InputType > & matrix )
inlineexplicit

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

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

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

HouseholderQR() [4/4]

шаблон<typename _MatrixType >
шаблон<typename InputType >
Eigen::HouseholderQR< _MatrixType >::HouseholderQR ( EigenBase< InputType > & matrix )
inlineexplicit

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

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

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

absDeterminant()

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

computeInPlace()

шаблон<typename MatrixType >
void Eigen::HouseholderQR< MatrixType >::computeInPlace
protected

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

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

hCoeffs()

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

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

householderQ()

шаблон<typename _MatrixType >
HouseholderSequenceType Eigen::HouseholderQR< _MatrixType >::householderQ ( void ) const
inline

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

Возвращаемое выражение может быть напрямую использовано для выполнения умножений матриц. Также его можно присвоить объекту плотной матрицы Matrix. Вот пример, показывающий, как восстановить полную или разреженную матрицу Q, а также как выполнять умножения матриц с помощью оператора*:

Пример:

MatrixXf A(MatrixXf::Random(5,3)), thinQ(MatrixXf::Identity(5,3)), Q;
A.setRandom();
HouseholderQR<MatrixXf> qr(A);
Q = qr.householderQ();
thinQ = qr.householderQ() * thinQ;
std::cout << "The complete unitary matrix Q is:\n" << Q << "\n\n";
std::cout << "The thin matrix Q is:\n" << thinQ << "\n\n";

Вывод:

The complete unitary matrix Q is:
  -0.676   0.0793    0.713  -0.0788   -0.147
  -0.221   -0.322    -0.37   -0.366   -0.759
  -0.353   -0.345   -0.214    0.841  -0.0518
   0.582   -0.462    0.555    0.176   -0.329
  -0.174   -0.747 -0.00907   -0.348    0.539

The thin matrix Q is:
  -0.676   0.0793    0.713
  -0.221   -0.322    -0.37
  -0.353   -0.345   -0.214
   0.582   -0.462    0.555
  -0.174   -0.747 -0.00907

logAbsDeterminant()

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

matrixQR()

шаблон<typename _MatrixType >
const MatrixType& Eigen::HouseholderQR< _MatrixType >::matrixQR ( ) const
inline
Возвращает
ссылку на матрицу, в которой Householder QR-разложение хранится в формате, совместимом с LAPACK.

solve()

шаблон<typename _MatrixType >
шаблон<typename Rhs >
const Solve<HouseholderQR, Rhs> Eigen::HouseholderQR< _MatrixType >::solve ( const MatrixBase< Rhs > & b ) const
inline

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

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

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

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

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

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

Пример:

typedef Matrix<float,3,3> Matrix3x3;
Matrix3x3 m = Matrix3x3::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.householderQr().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

Документация для этого класса была сгенерирована из следующего файла:
  • HouseholderQR.h

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

Spec-Zone.ru

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