|
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 ) |
