bdsqr Interface

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

public pure subroutine cbdsqr(uplo, n, ncvt, nru, ncc, d, e, vt, ldvt, u, ldu, c, ldc, rwork, info)

Arguments

Type IntentOptional 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

public pure subroutine dbdsqr(uplo, n, ncvt, nru, ncc, d, e, vt, ldvt, u, ldu, c, ldc, work, info)

Arguments

Type IntentOptional 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

public pure subroutine sbdsqr(uplo, n, ncvt, nru, ncc, d, e, vt, ldvt, u, ldu, c, ldc, work, info)

Arguments

Type IntentOptional 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

public pure subroutine zbdsqr(uplo, n, ncvt, nru, ncc, d, e, vt, ldvt, u, ldu, c, ldc, rwork, info)

Arguments

Type IntentOptional 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

public interface stdlib_cbdsqr()

Arguments

None

public interface stdlib_dbdsqr()

Arguments

None

public interface stdlib_sbdsqr()

Arguments

None

public interface stdlib_zbdsqr()

Arguments

None