![]() |
Reference documentation for deal.II version 9.2.0
|
#include <deal.II/lac/qr.h>
Public Types | |
| using | Number = typename VectorType::value_type |
Public Member Functions | |
| QR () | |
| virtual | ~QR ()=default |
| virtual bool | append_column (const VectorType &column) |
| virtual void | remove_column (const unsigned int k=0) |
| virtual void | multiply_with_Q (VectorType &y, const Vector< Number > &x) const |
| virtual void | multiply_with_QT (Vector< Number > &y, const VectorType &x) const |
| virtual void | multiply_with_A (VectorType &y, const Vector< Number > &x) const |
| virtual void | multiply_with_AT (Vector< Number > &y, const VectorType &x) const |
Public Member Functions inherited from BaseQR< VectorType > | |
| virtual | ~BaseQR ()=default |
| unsigned int | size () const |
| const LAPACKFullMatrix< Number > & | get_R () const |
| void | solve (Vector< Number > &x, const Vector< Number > &y, const bool transpose=false) const |
| boost::signals2::connection | connect_givens_slot (const std::function< void(const unsigned int i, const unsigned int j, const std::array< Number, 3 > &csr)> &slot) |
Private Member Functions | |
| void | apply_givens_rotation (const unsigned int i, const unsigned int k) |
Private Attributes | |
| VectorType | tmp |
Additional Inherited Members | |
Protected Member Functions inherited from BaseQR< VectorType > | |
| BaseQR () | |
| void | multiply_with_cols (VectorType &y, const Vector< Number > &x) const |
| void | multiply_with_colsT (Vector< Number > &y, const VectorType &x) const |
Protected Attributes inherited from BaseQR< VectorType > | |
| std::vector< std::unique_ptr< VectorType > > | columns |
| LAPACKFullMatrix< Number > | R |
| unsigned int | current_size |
| boost::signals2::signal< void(const unsigned int i, const unsigned int j, const std::array< Number, 3 > &)> | givens_signal |
A class to compute and store the QR factorization of a matrix represented by a set of column vectors.
The class is design to update a given (possibly empty) QR factorization of a matrix \(A\) (constructed incrementally by providing its columns) due to the addition of a new column vector to \(A\). This is equivalent to constructing an orthonormal basis by the Gram-Schmidt procedure. The class also provides update functionality when the first column is removed.
The VectorType template argument may either be a parallel and serial vector, and only need to have basic operations such as additions, scalar product, etc. It also needs to have a copy-constructor.
See sections 6.5.2-6.5.3 on pp. 335-338 in
as well as
| using QR< VectorType >::Number = typename VectorType::value_type |
| QR< VectorType >::QR | ( | ) |
Default constructor.
|
virtualdefault |
Destructor.
|
virtual |
Append column to the QR factorization. Returns true if the result is successful, i.e. the columns are linearly independent. Otherwise the column is rejected and the return value is false.
true. Implements BaseQR< VectorType >.
|
virtual |
Remove first column and update QR factorization.
Starting from the given QR decomposition \(QR= A = [a_1\,\dots a_n], \quad a_i \in {\mathbb R}^m\) we aim at computing factorization of \(\tilde Q \tilde R= \tilde A = [a_2\,\dots a_n], \quad a_i \in {\mathbb R}^m\).
The standard approach is to partition \(R\) as
\[ R = \begin{bmatrix} r_{11} & w^T \\ 0 & R_{33} \end{bmatrix} \]
It then follows that
\[ Q^T \tilde A = \begin{bmatrix} 0 & w^T \\ 0 & R_{33} \end{bmatrix} \]
is upper Hessenberg where unwanted sub-diagonal elements can be zeroed by a sequence of Givens rotations.
Note that \(\tilde R^T \tilde R = \tilde A^T \tilde A\), where the RHS is included in \(A^T A = R^T R\). Therefore \(\tilde R\) can be obtained by Cholesky decomposition.
Implements BaseQR< VectorType >.
|
virtual |
Set \(y = Qx\). The size of \(x\) should be consistent with the size of the R matrix.
Implements BaseQR< VectorType >.
|
virtual |
Set \(y = Q^Tx\). The size of \(x\) should be consistent with the size of column vectors.
Implements BaseQR< VectorType >.
|
virtual |
Set \(y = QRx\). The size of \(x\) should be consistent with the size of the R matrix.
Implements BaseQR< VectorType >.
|
virtual |
Set \(y = R^T Q^Tx\). The size of \(x\) should be consistent with the size of column vectors.
Implements BaseQR< VectorType >.
|
private |
Apply givens rotation in the (i,j)-plane to Q and R so that R(k,k) is zeroed.
See Chapter 5.1.9 of Golub 2013, Matrix computations.
|
private |