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()
| 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 |
|
| |
| 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_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 () |
|
| |
| typedef Eigen::Index | Index |
| Тип индексов интерфейса. Подробнее... |
|
HouseholderQR() [1/4]
| inline |
Конструктор по умолчанию.
Конструктор по умолчанию полезен в тех случаях, когда пользователь намерен выполнить разложение через HouseholderQR::compute(const MatrixType&).
HouseholderQR() [2/4]
| inline |
Конструктор по умолчанию с предварительной выделенной памятью.
Аналогичен конструктору по умолчанию, но с предварительным выделением внутренней памяти в соответствии с указанным размером задачи size.
- См. также
- HouseholderQR()
HouseholderQR() [3/4]
| inlineexplicit |
Создаёт QR-разложение из заданной матрицы.
Этот конструктор вычисляет QR-разложение матрицы matrix, вызывая метод compute(). Это сокращённый способ для:
HouseholderQR<MatrixType> qr(matrix.rows(), matrix.cols()); qr.compute(matrix);
- См. также
- compute()
HouseholderQR() [4/4]
| inlineexplicit |
Создаёт QR-разложение из заданной матрицы.
Этот перегруженный конструктор предназначен для непосредственного разложения, когда MatrixType является Eigen::Ref.
- См. также
- HouseholderQR(const EigenBase&)
absDeterminant()
| MatrixType::RealScalar Eigen::HouseholderQR< MatrixType >::absDeterminant |
- Возвращает
- абсолютное значение определителя матрицы, для которой *this является QR-разложением. Оно имеет только линейную сложность (то есть O(n), где n — размер квадратной матрицы), так как QR-разложение уже вычислено.
- Примечание
- Только для квадратных матриц.
- Предупреждение
- Определитель может быть очень большим или очень маленьким, поэтому для матриц достаточно большого размера существует риск переполнения/потери значимости. Один из способов решения этой проблемы — использовать logAbsDeterminant() вместо этого.
- См. также
- logAbsDeterminant(), MatrixBase::determinant()
computeInPlace()
| protected |
Выполняет QR-разложение заданной матрицы matrix. Результат разложения сохраняется в *this, и ссылка на *this возвращается.
- См. также
- класс HouseholderQR, HouseholderQR(const MatrixType&)
hCoeffs()
| inline |
- Возвращает
- ссылку на вектор коэффициентов Хаусхолдера, используемых для представления фактора
Q.
Только для расширенного использования.
householderQ()
| 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()
| MatrixType::RealScalar Eigen::HouseholderQR< MatrixType >::logAbsDeterminant |
- Возвращает
- натуральный логарифм абсолютного значения определителя матрицы, для которой *this является QR-разложением. Оно имеет только линейную сложность (то есть O(n), где n — размер квадратной матрицы), так как QR-разложение уже вычислено.
- Примечание
- Только для квадратных матриц.
- Этот метод полезен для решения проблемы переполнения/потери значимости, присущей вычислению определителей.
- См. также
- absDeterminant(), MatrixBase::determinant()
matrixQR()
| inline |
- Возвращает
- ссылку на матрицу, в которой Householder QR-разложение хранится в формате, совместимом с LAPACK.
solve()
| 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
Документация для этого класса была сгенерирована из следующего файла:
© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1HouseholderQR.html