### 14.15 Householder Transformations

A Householder transformation is a rank-1 modification of the identity matrix which can be used to zero out selected elements of a vector. A Householder matrix P takes the form,

    P = I - \tau v v^T

where v is a vector (called the Householder vector) and \tau = 2/(v^T v). The functions described in this section use the rank-1 structure of the Householder matrix to create and apply Householder transformations efficiently.

Function: double gsl_linalg_householder_transform (gsl_vector * w)
Function: gsl_complex gsl_linalg_complex_householder_transform (gsl_vector_complex * w)

  This function prepares a Householder transformation P = I - \tau v v^T which can be used to zero all the elements of the input vector w except the first. On output the Householder vector v is stored in w and the scalar \tau is returned. The householder vector v is normalized so that v[0] = 1, however this 1 is not stored in the output vector. Instead, w[0] is set to the first element of the transformed vector, so that if u = P w, w[0] = u[0] on output and the remainder of u is zero.

Function: int gsl_linalg_householder_hm (double tau, const gsl_vector * v, gsl_matrix * A)
Function: int gsl_linalg_complex_householder_hm (gsl_complex tau, const gsl_vector_complex * v, gsl_matrix_complex * A)

  This function applies the Householder matrix P defined by the scalar tau and the vector v to the left-hand side of the matrix A. On output the result P A is stored in A.

Function: int gsl_linalg_householder_mh (double tau, const gsl_vector * v, gsl_matrix * A)
Function: int gsl_linalg_complex_householder_mh (gsl_complex tau, const gsl_vector_complex * v, gsl_matrix_complex * A)

  This function applies the Householder matrix P defined by the scalar tau and the vector v to the right-hand side of the matrix A. On output the result A P is stored in A.

Function: int gsl_linalg_householder_hv (double tau, const gsl_vector * v, gsl_vector * w)
Function: int gsl_linalg_complex_householder_hv (gsl_complex tau, const gsl_vector_complex * v, gsl_vector_complex * w)

  This function applies the Householder transformation P defined by the scalar tau and the vector v to the vector w. On output the result P w is stored in w.