fortran-lapack
|
BBCSD computes the CS decomposition of a unitary matrix in bidiagonal-block form. More...
Public Member Functions | |
pure subroutine | 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, b22d, b22e, rwork, lrwork, info) |
la_cbbcsd | |
pure subroutine | 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, b22d, b22e, work, lwork, info) |
la_dbbcsd | |
la_qbbcsd | |
pure subroutine | 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, b22d, b22e, work, lwork, info) |
la_sbbcsd | |
la_wbbcsd | |
pure subroutine | 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, b22d, b22e, rwork, lrwork, info) |
la_zbbcsd | |
BBCSD computes the CS decomposition of a unitary matrix in bidiagonal-block form.
\renewcommand\arraystretch{1.3} \left[ \begin{array}{c|ccc} B_{11} & B_{12} & 0 & 0 \\ 0 & 0 & -I & 0 \\ \hline B_{21} & B_{22} & 0 & 0 \\ 0 & 0 & 0 & I \\ C & -S & 0 & 0 \end{array} \right] = \left[ \begin{array}{c|c} U_1 & 0 \\ \hline 0 & U_2 \end{array} \right] \left[ \begin{array}{c|ccc} 0 & 0 & -I & 0 \\ \hline S & C & 0 & 0 \\ 0 & 0 & 0 & I \end{array} \right] \left[ \begin{array}{c|c} V_1^H & 0 \\ \hline 0 & V_2^H \end{array} \right]
X is M \times M, its top-left block is P \times Q, and Q must be no larger than P, M-P, or M-Q. (If Q is not the smallest index, then X must be transposed and/or permuted. This can be done in constant time using the TRANS and SIGNS options. See CUNCSD for details.)
The bidiagonal matrices B_{11}, B_{12}, B_{21}, and B_{22} are represented implicitly by angles \theta(1:Q) and \phi(1:Q-1).
The unitary matrices U_1, U_2, V_1^T, and V_2^T are input/output.
The input matrices are pre- or post-multiplied by the appropriate singular vector matrices.
pure subroutine la_lapack::bbcsd::cbbcsd | ( | character, intent(in) | jobu1, |
character, intent(in) | jobu2, | ||
character, intent(in) | jobv1t, | ||
character, intent(in) | jobv2t, | ||
character, intent(in) | trans, | ||
integer(ilp), intent(in) | m, | ||
integer(ilp), intent(in) | p, | ||
integer(ilp), intent(in) | q, | ||
real(sp), dimension(*), intent(inout) | theta, | ||
real(sp), dimension(*), intent(inout) | phi, | ||
complex(sp), dimension(ldu1,*), intent(inout) | u1, | ||
integer(ilp), intent(in) | ldu1, | ||
complex(sp), dimension(ldu2,*), intent(inout) | u2, | ||
integer(ilp), intent(in) | ldu2, | ||
complex(sp), dimension(ldv1t,*), intent(inout) | v1t, | ||
integer(ilp), intent(in) | ldv1t, | ||
complex(sp), dimension(ldv2t,*), intent(inout) | v2t, | ||
integer(ilp), intent(in) | ldv2t, | ||
real(sp), dimension(*), intent(out) | b11d, | ||
real(sp), dimension(*), intent(out) | b11e, | ||
real(sp), dimension(*), intent(out) | b12d, | ||
real(sp), dimension(*), intent(out) | b12e, | ||
real(sp), dimension(*), intent(out) | b21d, | ||
real(sp), dimension(*), intent(out) | b21e, | ||
real(sp), dimension( *), intent(out) | b22d, | ||
real(sp), dimension(*), intent(out) | b22e, | ||
real(sp), dimension(*), intent(out) | rwork, | ||
integer(ilp), intent(in) | lrwork, | ||
integer(ilp), intent(out) | info ) |
pure subroutine la_lapack::bbcsd::dbbcsd | ( | character, intent(in) | jobu1, |
character, intent(in) | jobu2, | ||
character, intent(in) | jobv1t, | ||
character, intent(in) | jobv2t, | ||
character, intent(in) | trans, | ||
integer(ilp), intent(in) | m, | ||
integer(ilp), intent(in) | p, | ||
integer(ilp), intent(in) | q, | ||
real(dp), dimension(*), intent(inout) | theta, | ||
real(dp), dimension(*), intent(inout) | phi, | ||
real(dp), dimension(ldu1,*), intent(inout) | u1, | ||
integer(ilp), intent(in) | ldu1, | ||
real(dp), dimension(ldu2,*), intent(inout) | u2, | ||
integer(ilp), intent(in) | ldu2, | ||
real(dp), dimension(ldv1t,*), intent(inout) | v1t, | ||
integer(ilp), intent(in) | ldv1t, | ||
real(dp), dimension(ldv2t,*), intent(inout) | v2t, | ||
integer(ilp), intent(in) | ldv2t, | ||
real(dp), dimension(*), intent(out) | b11d, | ||
real(dp), dimension(*), intent(out) | b11e, | ||
real(dp), dimension(*), intent(out) | b12d, | ||
real(dp), dimension(*), intent(out) | b12e, | ||
real(dp), dimension(*), intent(out) | b21d, | ||
real(dp), dimension(*), intent(out) | b21e, | ||
real(dp), dimension( *), intent(out) | b22d, | ||
real(dp), dimension(*), intent(out) | b22e, | ||
real(dp), dimension(*), intent(out) | work, | ||
integer(ilp), intent(in) | lwork, | ||
integer(ilp), intent(out) | info ) |
la_lapack::bbcsd::la_cbbcsd |
la_lapack::bbcsd::la_dbbcsd |
la_lapack::bbcsd::la_qbbcsd |
la_lapack::bbcsd::la_sbbcsd |
la_lapack::bbcsd::la_wbbcsd |
la_lapack::bbcsd::la_zbbcsd |
pure subroutine la_lapack::bbcsd::sbbcsd | ( | character, intent(in) | jobu1, |
character, intent(in) | jobu2, | ||
character, intent(in) | jobv1t, | ||
character, intent(in) | jobv2t, | ||
character, intent(in) | trans, | ||
integer(ilp), intent(in) | m, | ||
integer(ilp), intent(in) | p, | ||
integer(ilp), intent(in) | q, | ||
real(sp), dimension(*), intent(inout) | theta, | ||
real(sp), dimension(*), intent(inout) | phi, | ||
real(sp), dimension(ldu1,*), intent(inout) | u1, | ||
integer(ilp), intent(in) | ldu1, | ||
real(sp), dimension(ldu2,*), intent(inout) | u2, | ||
integer(ilp), intent(in) | ldu2, | ||
real(sp), dimension(ldv1t,*), intent(inout) | v1t, | ||
integer(ilp), intent(in) | ldv1t, | ||
real(sp), dimension(ldv2t,*), intent(inout) | v2t, | ||
integer(ilp), intent(in) | ldv2t, | ||
real(sp), dimension(*), intent(out) | b11d, | ||
real(sp), dimension(*), intent(out) | b11e, | ||
real(sp), dimension(*), intent(out) | b12d, | ||
real(sp), dimension(*), intent(out) | b12e, | ||
real(sp), dimension(*), intent(out) | b21d, | ||
real(sp), dimension(*), intent(out) | b21e, | ||
real(sp), dimension( *), intent(out) | b22d, | ||
real(sp), dimension(*), intent(out) | b22e, | ||
real(sp), dimension(*), intent(out) | work, | ||
integer(ilp), intent(in) | lwork, | ||
integer(ilp), intent(out) | info ) |
pure subroutine la_lapack::bbcsd::zbbcsd | ( | character, intent(in) | jobu1, |
character, intent(in) | jobu2, | ||
character, intent(in) | jobv1t, | ||
character, intent(in) | jobv2t, | ||
character, intent(in) | trans, | ||
integer(ilp), intent(in) | m, | ||
integer(ilp), intent(in) | p, | ||
integer(ilp), intent(in) | q, | ||
real(dp), dimension(*), intent(inout) | theta, | ||
real(dp), dimension(*), intent(inout) | phi, | ||
complex(dp), dimension(ldu1,*), intent(inout) | u1, | ||
integer(ilp), intent(in) | ldu1, | ||
complex(dp), dimension(ldu2,*), intent(inout) | u2, | ||
integer(ilp), intent(in) | ldu2, | ||
complex(dp), dimension(ldv1t,*), intent(inout) | v1t, | ||
integer(ilp), intent(in) | ldv1t, | ||
complex(dp), dimension(ldv2t,*), intent(inout) | v2t, | ||
integer(ilp), intent(in) | ldv2t, | ||
real(dp), dimension(*), intent(out) | b11d, | ||
real(dp), dimension(*), intent(out) | b11e, | ||
real(dp), dimension(*), intent(out) | b12d, | ||
real(dp), dimension(*), intent(out) | b12e, | ||
real(dp), dimension(*), intent(out) | b21d, | ||
real(dp), dimension(*), intent(out) | b21e, | ||
real(dp), dimension( *), intent(out) | b22d, | ||
real(dp), dimension(*), intent(out) | b22e, | ||
real(dp), dimension(*), intent(out) | rwork, | ||
integer(ilp), intent(in) | lrwork, | ||
integer(ilp), intent(out) | info ) |