Module householder

Module householder 

Source
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§

HouseholderInfo
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 in matrix
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_basis and householder_factor, multiplied by matrix, and stores the result in matrix
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 by householder_basis and householder_factor, and stores the result in matrix
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_basis and householder_factor, multiplied by matrix, and stores the result in matrix
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 by householder_basis and householder_factor, and stores the result in matrix
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 in matrix
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