Reference documentation for deal.II version 9.1.1
|
#include <deal.II/lac/qr.h>
Public Types | |
typedef VectorType::value_type | Number |
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
|
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 |