public interface bdsqr
BDSQR computes the singular values and, optionally, the right and/or
left singular vectors from the singular value decomposition (SVD) of
a real N-by-N (upper or lower) bidiagonal matrix B using the implicit
zero-shift QR algorithm. The SVD of B has the form
B = Q * S * PH
where S is the diagonal matrix of singular values, Q is an orthogonal
matrix of left singular vectors, and P is an orthogonal matrix of
right singular vectors. If left singular vectors are requested, this
subroutine actually returns U*Q instead of Q, and, if right singular
vectors are requested, this subroutine returns PHVT instead of
PH, for given complex input matrices U and VT. When U and VT are
the unitary matrices that reduce a general matrix A to bidiagonal
form: A = UBVT, as computed by CGEBRD, then
A = (UQ) * S * (PH*VT)
is the SVD of A. Optionally, the subroutine may also compute QH*C
for a given complex input matrix C.
See "Computing Small Singular Values of Bidiagonal Matrices With
Guaranteed High Relative Accuracy," by J. Demmel and W. Kahan,
LAPACK Working Note #3 (or SIAM J. Sci. Statist. Comput. vol. 11,
no. 5, pp. 873-912, Sept 1990) and
"Accurate singular values and differential qd algorithms," by
B. Parlett and V. Fernando, Technical Report CPAM-554, Mathematics
Department, University of California at Berkeley, July 1992
for a detailed description of the algorithm.
Subroutines
Arguments
| Type |
Intent | Optional | Attributes |
|
Name |
|
|
character(len=1),
|
intent(in) |
|
|
:: |
uplo |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
n |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ncvt |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
nru |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ncc |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
d(*) |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
e(*) |
|
|
complex(kind=sp),
|
intent(inout) |
|
|
:: |
vt(ldvt,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldvt |
|
|
complex(kind=sp),
|
intent(inout) |
|
|
:: |
u(ldu,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldu |
|
|
complex(kind=sp),
|
intent(inout) |
|
|
:: |
c(ldc,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldc |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
rwork(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
info |
|
Arguments
| Type |
Intent | Optional | Attributes |
|
Name |
|
|
character(len=1),
|
intent(in) |
|
|
:: |
uplo |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
n |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ncvt |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
nru |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ncc |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
d(*) |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
e(*) |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
vt(ldvt,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldvt |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
u(ldu,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldu |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
c(ldc,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldc |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
work(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
info |
|
Arguments
| Type |
Intent | Optional | Attributes |
|
Name |
|
|
character(len=1),
|
intent(in) |
|
|
:: |
uplo |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
n |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ncvt |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
nru |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ncc |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
d(*) |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
e(*) |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
vt(ldvt,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldvt |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
u(ldu,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldu |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
c(ldc,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldc |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
work(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
info |
|
Arguments
| Type |
Intent | Optional | Attributes |
|
Name |
|
|
character(len=1),
|
intent(in) |
|
|
:: |
uplo |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
n |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ncvt |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
nru |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ncc |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
d(*) |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
e(*) |
|
|
complex(kind=dp),
|
intent(inout) |
|
|
:: |
vt(ldvt,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldvt |
|
|
complex(kind=dp),
|
intent(inout) |
|
|
:: |
u(ldu,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldu |
|
|
complex(kind=dp),
|
intent(inout) |
|
|
:: |
c(ldc,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldc |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
rwork(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
info |
|
Module Procedures