F08KTF (ZUNGBR) generates one of the complex unitary matrices
or
which were determined by
F08KSF (ZGEBRD) when reducing a complex matrix to bidiagonal form.
F08KTF (ZUNGBR) is intended to be used after a call to
F08KSF (ZGEBRD), which reduces a complex rectangular matrix
to real bidiagonal form
by a unitary transformation:
.
F08KSF (ZGEBRD) represents the matrices
and
as products of elementary reflectors.
The various possibilities are specified by the parameters
VECT,
M,
N and
K. The appropriate values to cover the most likely cases are as follows (assuming that
was an
by
matrix):
- To form the full by matrix :
CALL ZUNGBR('Q',m,m,n,...)
(note that the array A must have at least columns).
- If , to form the leading columns of :
CALL ZUNGBR('Q',m,n,n,...)
- To form the full by matrix :
CALL ZUNGBR('P',n,n,m,...)
(note that the array A must have at least rows).
- If , to form the leading rows of :
CALL ZUNGBR('P',m,n,m,...)
The computed matrix
differs from an exactly unitary matrix by a matrix
such that
where
is the
machine precision. A similar statement holds for the computed matrix
.
The total number of real floating point operations for the cases listed in
Section 3 are approximately as follows:
- To form the whole of :
- if ,
- if ;
- To form the leading columns of when :
- To form the whole of :
- if ,
- if ;
- To form the leading rows of when :
The real analogue of this routine is
F08KFF (DORGBR).
For this routine two examples are presented, both of which involve computing the singular value decomposition of a matrix
, where
in the first example and
in the second.
must first be reduced to tridiagonal form by
F08KSF (ZGEBRD). The program then calls F08KTF (ZUNGBR) twice to form
and
, and passes these matrices to
F08MSF (ZBDSQR), which computes the singular value decomposition of
.