Next: Householder Transformations, Previous: Hessenberg-Triangular Decomposition of Real Matrices, Up: Linear Algebra [Index]

A general matrix *A* can be factorized by similarity
transformations into the form,

A = U B V^T

where *U* and *V* are orthogonal matrices and *B* is a
*N*-by-*N* bidiagonal matrix with non-zero entries only on the
diagonal and superdiagonal. The size of `U` is *M*-by-*N*
and the size of `V` is *N*-by-*N*.

- Function:
*int***gsl_linalg_bidiag_decomp***(gsl_matrix **`A`, gsl_vector *`tau_U`, gsl_vector *`tau_V`) This function factorizes the

*M*-by-*N*matrix`A`into bidiagonal form*U B V^T*. The diagonal and superdiagonal of the matrix*B*are stored in the diagonal and superdiagonal of`A`. The orthogonal matrices*U*and`V`are stored as compressed Householder vectors in the remaining elements of`A`. The Householder coefficients are stored in the vectors`tau_U`and`tau_V`. The length of`tau_U`must equal the number of elements in the diagonal of`A`and the length of`tau_V`should be one element shorter.

- Function:
*int***gsl_linalg_bidiag_unpack***(const gsl_matrix **`A`, const gsl_vector *`tau_U`, gsl_matrix *`U`, const gsl_vector *`tau_V`, gsl_matrix *`V`, gsl_vector *`diag`, gsl_vector *`superdiag`) This function unpacks the bidiagonal decomposition of

`A`produced by`gsl_linalg_bidiag_decomp`

, (`A`,`tau_U`,`tau_V`) into the separate orthogonal matrices`U`,`V`and the diagonal vector`diag`and superdiagonal`superdiag`. Note that`U`is stored as a compact*M*-by-*N*orthogonal matrix satisfying*U^T U = I*for efficiency.

- Function:
*int***gsl_linalg_bidiag_unpack2***(gsl_matrix **`A`, gsl_vector *`tau_U`, gsl_vector *`tau_V`, gsl_matrix *`V`) This function unpacks the bidiagonal decomposition of

`A`produced by`gsl_linalg_bidiag_decomp`

, (`A`,`tau_U`,`tau_V`) into the separate orthogonal matrices`U`,`V`and the diagonal vector`diag`and superdiagonal`superdiag`. The matrix`U`is stored in-place in`A`.

- Function:
*int***gsl_linalg_bidiag_unpack_B***(const gsl_matrix **`A`, gsl_vector *`diag`, gsl_vector *`superdiag`) This function unpacks the diagonal and superdiagonal of the bidiagonal decomposition of

`A`from`gsl_linalg_bidiag_decomp`

, into the diagonal vector`diag`and superdiagonal vector`superdiag`.