Click or drag to resize

DBDSQRRun Method

Purpose ======= DBDSQR 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 * P**T 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 P**T*VT instead of P**T, for given real input matrices U and VT. When U and VT are the orthogonal matrices that reduce a general matrix A to bidiagonal form: A = U*B*VT, as computed by DGEBRD, then A = (U*Q) * S * (P**T*VT) is the SVD of A. Optionally, the subroutine may also compute Q**T*C for a given real 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.

Namespace: DotNumerics.LinearAlgebra.CSLapack
Assembly: DWSIM.MathOps.DotNumerics (in DWSIM.MathOps.DotNumerics.dll) Version: 1.0.0.0 (1.0.0.0)
Syntax
public void Run(
	string UPLO,
	int N,
	int NCVT,
	int NRU,
	int NCC,
	ref double[] D,
	int offset_d,
	ref double[] E,
	int offset_e,
	ref double[] VT,
	int offset_vt,
	int LDVT,
	ref double[] U,
	int offset_u,
	int LDU,
	ref double[] C,
	int offset_c,
	int LDC,
	ref double[] WORK,
	int offset_work,
	ref int INFO
)
Request Example View Source

Parameters

UPLO  String
(input) CHARACTER*1 = 'U': B is upper bidiagonal; = 'L': B is lower bidiagonal.
N  Int32
(input) INTEGER The order of the matrix B. N .GE. 0.
NCVT  Int32
(input) INTEGER The number of columns of the matrix VT. NCVT .GE. 0.
NRU  Int32
(input) INTEGER The number of rows of the matrix U. NRU .GE. 0.
NCC  Int32
(input) INTEGER The number of columns of the matrix C. NCC .GE. 0.
D  Double
(input/output) DOUBLE PRECISION array, dimension (N) On entry, the n diagonal elements of the bidiagonal matrix B. On exit, if INFO=0, the singular values of B in decreasing order.
offset_d  Int32
 
E  Double
(input/output) DOUBLE PRECISION array, dimension (N-1) On entry, the N-1 offdiagonal elements of the bidiagonal matrix B. On exit, if INFO = 0, E is destroyed; if INFO .GT. 0, D and E will contain the diagonal and superdiagonal elements of a bidiagonal matrix orthogonally equivalent to the one given as input.
offset_e  Int32
 
VT  Double
(input/output) DOUBLE PRECISION array, dimension (LDVT, NCVT) On entry, an N-by-NCVT matrix VT. On exit, VT is overwritten by P**T * VT. Not referenced if NCVT = 0.
offset_vt  Int32
 
LDVT  Int32
(input) INTEGER The leading dimension of the array VT. LDVT .GE. max(1,N) if NCVT .GT. 0; LDVT .GE. 1 if NCVT = 0.
U  Double
(input/output) DOUBLE PRECISION array, dimension (LDU, N) On entry, an NRU-by-N matrix U. On exit, U is overwritten by U * Q. Not referenced if NRU = 0.
offset_u  Int32
 
LDU  Int32
(input) INTEGER The leading dimension of the array U. LDU .GE. max(1,NRU).
C  Double
(input/output) DOUBLE PRECISION array, dimension (LDC, NCC) On entry, an N-by-NCC matrix C. On exit, C is overwritten by Q**T * C. Not referenced if NCC = 0.
offset_c  Int32
 
LDC  Int32
(input) INTEGER The leading dimension of the array C. LDC .GE. max(1,N) if NCC .GT. 0; LDC .GE.1 if NCC = 0.
WORK  Double
(workspace) DOUBLE PRECISION array, dimension (2*N) if NCVT = NRU = NCC = 0, (max(1, 4*N)) otherwise
offset_work  Int32
 
INFO  Int32
(output) INTEGER = 0: successful exit .LT. 0: If INFO = -i, the i-th argument had an illegal value .GT. 0: the algorithm did not converge; D and E contain the elements of a bidiagonal matrix which is orthogonally similar to the input matrix B; if INFO = i, i elements of E have not converged to zero.
See Also