|
| ImplicitQR () |
|
virtual | ~ImplicitQR ()=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 |
|
boost::signals2::connection | connect_append_column_slot (const std::function< bool(const Vector< Number > &u, const Number &rho2, const Number &col_norm_sqr)> &slot) |
|
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) |
|
template<typename VectorType>
class ImplicitQR< VectorType >
A class to obtain the triangular \(R\) matrix of the \(A=QR\) factorization together with the matrix \(A\) itself. The orthonormal matrix \(Q\) is not stored explicitly, the name of the class. The multiplication with \(Q\) can be represented as \(Q=A R^{-1}\), whereas the multiplication with \(Q^T\) is given by \(Q^T=R^{-T}A^T\).
The class is designed to update a given (possibly empty) QR factorization due to the addition of a new column vector. This is equivalent to constructing an orthonormal basis by the Gram-Schmidt procedure. The class also provides update functionality when the 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.
Definition at line 347 of file qr.h.
template<typename VectorType >
virtual void ImplicitQR< VectorType >::remove_column |
( |
const unsigned int |
k = 0 | ) |
|
|
virtual |
Remove column and update QR factorization.
Starting from the given QR decomposition \(QR= A = [a_1\,\dots a_n], \quad a_i \in R^m\) we aim at computing factorization of \(\tilde Q \tilde R= \tilde A = [a_2\,\dots a_n], \quad a_i \in R^m\).
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 >.
template<typename VectorType >
Signal used to decide if the new column is linear dependent.
Here, u
is the last column of the to-be R matrix, rho
is its diagonal and col_norm_sqr
is the square of the \(l2\) norm of the column. The function should return true
if the new column is linearly independent.
Definition at line 428 of file qr.h.