Expand description
block householder transformations
a householder reflection is linear transformation that describes a reflection about a hyperplane that crosses the origin of the space
let $v$ be a unit vector that is orthogonal to the hyperplane. then the corresponding householder transformation in matrix form is $I - 2vv^H$, where $I$ is the identity matrix
in practice, a non unit vector $v$ is used, so the transformation is written as $$H = I - \frac{vv^H}{\tau}$$
a block householder transformation is a sequence of such transformations $H_0, H_1, \dots, H_{b -1 }$ applied one after the other, with the restriction that the first $i$ components of the vector $v_i$ of the $i$-th transformation are zero, and the component at index $i$ is one
the matrix $V = [v_0\ v_1\ \dots\ v_{b-1}]$ is thus a lower trapezoidal matrix with unit diagonal. we call it the householder basis
there exists a unique upper triangular matrix $T$, that we call the householder factor, such that $$H_0 \times \dots \times H_{b-1} = I - VT^{-1}V^H$$
a block householder sequence is a sequence of such transformations, composed of two matrices:
- a lower trapezoidal matrix with unit diagonal, which is the horizontal concatenation of the bases of each block householder transformation,
- a horizontal concatenation of the householder factors.
examples on how to create and manipulate block householder sequences are provided in the documentation of the $QR$ module.
Structs§
- Householder
Info - Householder information
Functions§
- apply_
block_ householder_ on_ the_ left_ in_ place_ scratch - computes the size and alignment of required workspace for applying a block householder transformation to a right-hand-side matrix in place
- apply_
block_ householder_ on_ the_ left_ in_ place_ with_ conj - computes the product of the given block householder transformation, multiplied by
matrix, and stores the result inmatrix - apply_
block_ householder_ on_ the_ right_ in_ place_ scratch - computes the size and alignment of required workspace for applying a block householder transformation to a left-hand-side matrix in place
- apply_
block_ householder_ on_ the_ right_ in_ place_ with_ conj - computes the product of the matrix, multiplied by the given block householder transformation,
and stores the result in
matrix - apply_
block_ householder_ sequence_ on_ the_ left_ in_ place_ scratch - computes the size and alignment of required workspace for applying a sequence of block householder transformations to a right-hand-side matrix in place
- apply_
block_ householder_ sequence_ on_ the_ left_ in_ place_ with_ conj - computes the product of a sequence of block householder transformations given by
householder_basisandhouseholder_factor, multiplied bymatrix, and stores the result inmatrix - apply_
block_ householder_ sequence_ on_ the_ right_ in_ place_ scratch - computes the size and alignment of required workspace for applying a sequence of block householder transformations to a left-hand-side matrix in place
- apply_
block_ householder_ sequence_ on_ the_ right_ in_ place_ with_ conj - computes the product of
matrix, multiplied by a sequence of block householder transformations given byhouseholder_basisandhouseholder_factor, and stores the result inmatrix - apply_
block_ householder_ sequence_ transpose_ on_ the_ left_ in_ place_ scratch - computes the size and alignment of required workspace for applying the transpose of a sequence of block householder transformations to a right-hand-side matrix in place
- apply_
block_ householder_ sequence_ transpose_ on_ the_ left_ in_ place_ with_ conj - computes the product of the transpose of a sequence block householder transformations given by
householder_basisandhouseholder_factor, multiplied bymatrix, and stores the result inmatrix - apply_
block_ householder_ sequence_ transpose_ on_ the_ right_ in_ place_ scratch - computes the size and alignment of required workspace for applying the transpose of a sequence of block householder transformations to a left-hand-side matrix in place
- apply_
block_ householder_ sequence_ transpose_ on_ the_ right_ in_ place_ with_ conj - computes the product of
matrix, multiplied by the transpose of a sequence of block householder transformations given byhouseholder_basisandhouseholder_factor, and stores the result inmatrix - apply_
block_ householder_ transpose_ on_ the_ left_ in_ place_ scratch - computes the size and alignment of required workspace for applying the transpose of a block householder transformation to a right-hand-side matrix in place
- apply_
block_ householder_ transpose_ on_ the_ left_ in_ place_ with_ conj - computes the product of the transpose of the given block householder transformation, multiplied
by
matrix, and stores the result inmatrix - apply_
block_ householder_ transpose_ on_ the_ right_ in_ place_ scratch - computes the size and alignment of required workspace for applying the transpose of a block householder transformation to a left-hand-side matrix in place
- apply_
block_ householder_ transpose_ on_ the_ right_ in_ place_ with_ conj - computes the product of the matrix, multiplied by the transpose of the given block householder
transformation, and stores the result in
matrix - make_
householder_ in_ place - computes the householder reflection $I - \frac{v v^H}{\tau}$ such that when multiplied by $x$
from the left, the result is $\beta e_0$. $\tau$ and $(\text{head} - \beta)^{-1}$ are returned
and $\tau$ is real-valued. $\beta$ is stored in
head