![]() |
deal.II version 9.7.1
|
#include <deal.II/lac/qr.h>
A class to obtain the triangular 







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.

Public Types | |
| using | Number = typename VectorType::value_type |
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) |
| 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) |
Protected Member Functions | |
| void | multiply_with_cols (VectorType &y, const Vector< Number > &x) const |
| void | multiply_with_colsT (Vector< Number > &y, const VectorType &x) const |
Protected Attributes | |
| 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 |
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 |
| using ImplicitQR< VectorType >::Number = typename VectorType::value_type |
| 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$](form_1922.png)
![$\tilde Q \tilde R= \tilde A = [a_2\,\dots a_n], \quad a_i \in R^m$](form_1923.png)
Note that 


Implements BaseQR< VectorType >.
|
virtual |
Set 

Implements BaseQR< VectorType >.
|
virtual |
Set 

Implements BaseQR< VectorType >.
|
virtual |
Set 

Implements BaseQR< VectorType >.
|
virtual |
Set 

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 
true if the new column is linearly independent.
|
private |
Apply givens rotation in the (i,k)-plane to zero out 
Return size of the subspace.
|
inherited |
Return the current upper triangular matrix R.
|
inherited |
Solve 
x and y should be consistent with the current size of the subspace. If transpose is true, 
|
inherited |
Connect a slot to retrieve a notification when the Givens rotations are performed.
The function takes two indices, i and j, describing the plane of rotation, and a triplet of numbers csr (cosine, sine and radius, see Utilities::LinearAlgebra::givens_rotation()) which represents the rotation matrix.
|
protectedinherited |
Compute 

|
protectedinherited |
Multiply with transpose columns stored in the object.
|
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 
true if the new column is linearly independent.
|
protectedinherited |
|
protectedinherited |