Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
?bbcsd
Computes the CS decomposition of an orthogonal/unitary matrix in bidiagonal-block form.
Syntax
call sbbcsd ( jobu1 , jobu2 , jobv1t , jobv2t , trans , m , p , q , theta , phi , u1 , ldu1 , u2 , ldu2 , v1t , ldv1t , v2t , ldv2t , b11d , b11e , b12d , b12e , b21d , b21e , b21e , b22e , work , lwork , info )
call dbbcsd ( jobu1 , jobu2 , jobv1t , jobv2t , trans , m , p , q , theta , phi , u1 , ldu1 , u2 , ldu2 , v1t , ldv1t , v2t , ldv2t , b11d , b11e , b12d , b12e , b21d , b21e , b21e , b22e , work , lwork , info )
call cbbcsd ( jobu1 , jobu2 , jobv1t , jobv2t , trans , m , p , q , theta , phi , u1 , ldu1 , u2 , ldu2 , v1t , ldv1t , v2t , ldv2t , b11d , b11e , b12d , b12e , b21d , b21e , b21e , b22e , rwork , rlwork , info )
call zbbcsd ( jobu1 , jobu2 , jobv1t , jobv2t , trans , m , p , q , theta , phi , u1 , ldu1 , u2 , ldu2 , v1t , ldv1t , v2t , ldv2t , b11d , b11e , b12d , b12e , b21d , b21e , b21e , b22e , rwork , rlwork , info )
call bbcsd ( theta , phi , u1 , u2 , v1t , v2t [ , b11d ] [ , b11e ] [ , b12d ] [ , b12e ] [ , b21d ] [ , b21e ] [ , b22d ] [ , b22e ] [ , jobu1 ] [ , jobu2 ] [ , jobv1t ] [ , jobv2t ] [ , trans ] [ , info ] )
Include Files
mkl.fi , mkl_lapack.f90
Description
mkl_lapack.fi The routine ?bbcsd computes the CS decomposition of an orthogonal or unitary matrix in bidiagonal-block form:
or
respectively.
x is m -by- m with the top-left block p -by- q . Note that q must not be larger than p , m - p , or m - q . If q is not the smallest index, x must be transposed and/or permuted in constant time using the trans option. See ?orcsd/?uncsd for details.
The bidiagonal matrices b11 , b12 , b21 , and b22 are represented implicitly by angles theta(1:q) and phi(1:q-1) .
The orthogonal/unitary matrices u1 , u2 , v1:code:`t` , and v2:code:`t` are input/output. The input matrices are pre- or post-multiplied by the appropriate singular vector matrices.
Input Parameters
jobu1
CHARACTER . If equals Y , then u1 is updated. Otherwise, u1 is not updated.
jobu2
CHARACTER . If equals Y , then u2 is updated. Otherwise, u2 is not updated.
jobv1t
CHARACTER . If equals Y , then v1:code:`t` is updated. Otherwise, v1:code:`t` is not updated.
jobv2t
CHARACTER . If equals Y , then v2:code:`t` is updated. Otherwise, v2:code:`t` is not updated.
- trans
-
CHARACTER
m
INTEGER . The number of rows and columns of the orthogonal/unitary matrix X in bidiagonal-block form.
p
INTEGER . The number of rows in the top-left block of x . 0 ≤p≤m .
q
INTEGER . The number of columns in the top-left block of x . 0 q≤ min(p,m-p,m-q) .
- theta
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd
Array, size ( q ) .
On entry, the angles theta(1)[0] , …, theta(q)[q - 1] that, along with phi(1)[0] , …, phi(q-1)[q - 2] , define the matrix in bidiagonal-block form as returned by GUID-B830AE7B-F650-497E-B4F8-BB7E116650AE.xml .
- phi
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd
Array, size ( q -1) .
The angles phi(1)[0] , …, phi(q-1)[q - 2] that, along with theta(1)[0] , …, theta(q)[q - 1] , define the matrix in bidiagonal-block form as returned by GUID-B830AE7B-F650-497E-B4F8-BB7E116650AE.xml .
- u1
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd
Array, size ( ldu1 , p ) .
On entry, a p -by- p matrix.
ldu1
INTEGER . The leading dimension of the array u1 , ldu1 ≤ max(1, p ).
- u2
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd
Array, size ( ldu2 , m - p ) .
On entry, an ( m - p )-by-( m - p ) matrix.
ldu2
INTEGER . The leading dimension of the array u2 , ldu2 ≤ max(1, m - p ).
- v1t
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd
Array, size ( ldv1t , q ) .
On entry, a q -by- q matrix.
ldv1t
INTEGER . The leading dimension of the array v1t , ldv1t ≤ max(1, q ).
- v2t
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd
Array, size ( ldv2t , m - q ) .
On entry, an ( m - q )-by-( m - q ) matrix.
ldv2t
INTEGER . The leading dimension of the array v2t , ldv2t ≤ max(1, m - q ).
- work
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd Workspace array, size ( max(1,lwork) ).
lwork
INTEGER . The size of the work array. lwork? max(1,8*q)
If lwork = -1 , then a workspace query is assumed; the routine only calculates the optimal size of the work array, returns this value as the first entry of the work array, and no error message related to lwork is issued by xerbla .
Output Parameters
- theta
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd On exit, the angles whose cosines and sines define the diagonal blocks in the CS decomposition.
- u1
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd On exit, u1 is postmultiplied by the left singular vector matrix common to [ b11 ; 0 ] and [ b12 0 0 ; 0 -I 0 ] .
- u2
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd On exit, u2 is postmultiplied by the left singular vector matrix common to [ b21 ; 0 ] and [ b22 0 0 ; 0 0 I ] .
- v1t
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd
Array, size ( q ) .
On exit, v1t is premultiplied by the transpose of the right singular vector matrix common to [ b11 ; 0 ] and [ b21 ; 0 ] .
- v2t
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd On exit, v2t is premultiplied by the transpose of the right singular vector matrix common to [ b12 0 0 ; 0 -I 0 ] and [ b22 0 0 ; 0 0 I ] .
- b11d
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd
Array, size ( q ) .
When ?bbcsd converges, b11d contains the cosines of theta(1)[0] , …, theta(q)[q - 1] . If ?bbcsd fails to converge, b11d contains the diagonal of the partially reduced top left block.
- b11e
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd
Array, size ( q -1) .
When ?bbcsd converges, b11e contains zeros. If ?bbcsd fails to converge, b11e contains the superdiagonal of the partially reduced top left block.
- b12d
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd
Array, size ( q ) .
When ?bbcsd converges, b12d contains the negative sines of theta(1)[0] , …, theta(q)[q - 1] . If ?bbcsd fails to converge, b12d contains the diagonal of the partially reduced top right block.
- b12e
-
REAL for sbbcsd DOUBLE PRECISION for dbbcsd COMPLEX for cbbcsd DOUBLE COMPLEX for zbbcsd
Array, size ( q -1) .
When ?bbcsd converges, b12e contains zeros. If ?bbcsd fails to converge, b11e contains the superdiagonal of the partially reduced top right block.
info
INTEGER .
= 0: successful exit
< 0: if info = -i , the i -th argument has an illegal value
> 0: if ?bbcsd did not converge, info specifies the number of nonzero entries in phi , and b11d , b11e , etc. contain the partially reduced matrix.
Return Values
No return value, info is an Output Parameter.
Fortran 95 Interface Notes
Routines in Fortran 95 interface have fewer arguments in the calling sequence than their FORTRAN 77 counterparts. For general conventions applied to skip redundant or reconstructible arguments, see Fortran 95 Interface Conventions .
Specific details for the routine ?bbcsd interface are as follows:
theta
Holds the vector of length q .
phi
Holds the vector of length q -1.
u1
Holds the matrix of size ( p , p ).
u2
Holds the matrix of size ( m - p , m - p ).
v1t
Holds the matrix of size ( q , q ).
v2t
Holds the matrix of size ( m - q , m - q ).
b11d
Holds the vector of length q .
b11e
Holds the vector of length q -1.
b12d
Holds the vector of length q .
b12e
Holds the vector of length q -1.
b21d
Holds the vector of length q .
b21e
Holds the vector of length q -1.
b22d
Holds the vector of length q .
b22e
Holds the vector of length q -1.
jobsu1
Indicates whether u1 is computed. Must be ‘Y’ or ‘O’ .
jobsu2
Indicates whether u2 is computed. Must be ‘Y’ or ‘O’ .
jobv1t
Indicates whether v1:code:`t` is computed. Must be ‘Y’ or ‘O’ .
jobv2t
Indicates whether v2:code:`t` is computed. Must be ‘Y’ or ‘O’ .
trans
Must be ‘N’ or ‘T’ .