![]() |
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 | |
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) |
Private Member Functions | |
void | apply_givens_rotation (const unsigned int i, const unsigned int k) |
Private Attributes | |
boost::signals2::signal< bool(const Vector< Number > &u, const Number &rho, const Number &col_norm_sqr)> | column_signal |
Additional Inherited Members | |
![]() | |
BaseQR () | |
void | multiply_with_cols (VectorType &y, const Vector< Number > &x) const |
void | multiply_with_colsT (Vector< Number > &y, const VectorType &x) const |
![]() | |
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 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.
typedef VectorType::value_type ImplicitQR< VectorType >::Number |
ImplicitQR< VectorType >::ImplicitQR | ( | ) |
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
.
Implements BaseQR< VectorType >.
|
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 >.
|
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 >.
boost::signals2::connection ImplicitQR< VectorType >::connect_append_column_slot | ( | const std::function< bool(const Vector< Number > &u, const Number &rho2, const Number &col_norm_sqr)> & | slot | ) |
Connect a slot to implement a custom check of linear dependency during addition of a column.
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.
|
private |
Apply givens rotation in the (i,k)
-plane to zero out R(k,k).
|
private |
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.