F08KFF (DORGBR) generates one of the real orthogonal matrices
or
which were determined by
F08KEF (DGEBRD) when reducing a real matrix to bidiagonal form.
F08KFF (DORGBR) is intended to be used after a call to
F08KEF (DGEBRD), which reduces a real rectangular matrix
to bidiagonal form
by an orthogonal transformation:
.
F08KEF (DGEBRD) 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 DORGBR('Q',m,m,n,...)
(note that the array A must have at least columns).
- If , to form the leading columns of :
CALL DORGBR('Q',m,n,n,...)
- To form the full by matrix :
CALL DORGBR('P',n,n,m,...)
(note that the array A must have at least rows).
- If , to form the leading rows of :
CALL DORGBR('P',m,n,m,...)
The computed matrix
differs from an exactly orthogonal matrix by a matrix
such that
where
is the
machine precision. A similar statement holds for the computed matrix
.
The total number of 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 complex analogue of this routine is
F08KTF (ZUNGBR).
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
F08KEF (DGEBRD). The program then calls F08KFF (DORGBR) twice to form
and
, and passes these matrices to
F08MEF (DBDSQR), which computes the singular value decomposition of
.