Reference documentation for deal.II version 9.4.0
Householder< number > Class Template Reference

#include <deal.II/lac/householder.h>

Inheritance diagram for Householder< number >:
[legend]

## Public Types

using size_type = types::global_dof_index

## Public Member Functions

Householder ()=default

template<typename number2 >
Householder (const FullMatrix< number2 > &A)

template<typename number2 >
void initialize (const FullMatrix< number2 > &A)

template<typename number2 >
double least_squares (Vector< number2 > &dst, const Vector< number2 > &src) const

template<typename number2 >
double least_squares (BlockVector< number2 > &dst, const BlockVector< number2 > &src) const

template<class VectorType >
void vmult (VectorType &dst, const VectorType &src) const

template<class VectorType >
void Tvmult (VectorType &dst, const VectorType &src) const

## Private Attributes

std::vector< number > diagonal

FullMatrix< double > storage

## Detailed Description

template<typename number>
class Householder< number >

QR-decomposition of a full matrix.

This class computes the QR-decomposition of given matrix by the Householder algorithm. Then, the function least_squares() can be used to compute the vector $$x$$ minimizing $$\|Ax-b\|$$ for a given vector $$b$$. The QR decomposition of $$A$$ is useful for this purpose because the minimizer is given by the equation $$x=(A^TA)^{-1}A^Tb=(R^TQ^TQR)^{-1}R^TQ^Tb$$ which is easy to compute because $$Q$$ is an orthogonal matrix, and consequently $$Q^TQ=I$$. Thus, $$x=(R^TR)^{-1}R^TQ^Tb=R^{-1}R^{-T}R^TQ^Tb=R^{-1}Q^Tb$$. Furthermore, $$R$$ is triangular, so applying $$R^{-1}$$ to a vector only involves a backward or forward solve.

### Implementation details

The class does not in fact store the $$Q$$ and $$R$$ factors explicitly as matrices. It does store $$R$$, but the $$Q$$ factor is stored as the product of Householder reflections of the form $$Q_i = I-v_i v_i^T$$ where the vectors $$v_i$$ are so that they can be stored in the lower-triangular part of an underlying matrix object, whereas $$R$$ is stored in the upper triangular part.

The $$v_i$$ vectors and the $$R$$ matrix now are in conflict because they both want to use the diagonal entry of the matrix, but we can only store one in these positions, of course. Consequently, the entries $$(v_i)_i$$ are stored separately in the diagonal member variable.

Note
Instantiations for this template are provided for <float> and <double>; others can be generated in application programs (see the section on Template instantiations in the manual).

Definition at line 79 of file householder.h.

The documentation for this class was generated from the following file: