Functions | |
| subroutine | zgeqpf (m, n, a, lda, jpvt, tau, work, rwork, info) |
| ZGEQPF | |
| subroutine | zgebak (job, side, n, ilo, ihi, scale, m, v, ldv, info) |
| ZGEBAK | |
| subroutine | zgebal (job, n, a, lda, ilo, ihi, scale, info) |
| ZGEBAL | |
| subroutine | zgebd2 (m, n, a, lda, d, e, tauq, taup, work, info) |
| ZGEBD2 reduces a general matrix to bidiagonal form using an unblocked algorithm. | |
| subroutine | zgebrd (m, n, a, lda, d, e, tauq, taup, work, lwork, info) |
| ZGEBRD | |
| subroutine | zgecon (norm, n, a, lda, anorm, rcond, work, rwork, info) |
| ZGECON | |
| subroutine | zgeequ (m, n, a, lda, r, c, rowcnd, colcnd, amax, info) |
| ZGEEQU | |
| subroutine | zgeequb (m, n, a, lda, r, c, rowcnd, colcnd, amax, info) |
| ZGEEQUB | |
| subroutine | zgehd2 (n, ilo, ihi, a, lda, tau, work, info) |
| ZGEHD2 reduces a general square matrix to upper Hessenberg form using an unblocked algorithm. | |
| subroutine | zgehrd (n, ilo, ihi, a, lda, tau, work, lwork, info) |
| ZGEHRD | |
| subroutine | zgelq2 (m, n, a, lda, tau, work, info) |
| ZGELQ2 computes the LQ factorization of a general rectangular matrix using an unblocked algorithm. | |
| subroutine | zgelqf (m, n, a, lda, tau, work, lwork, info) |
| ZGELQF | |
| subroutine | zgemqrt (side, trans, m, n, k, nb, v, ldv, t, ldt, c, ldc, work, info) |
| ZGEMQRT | |
| subroutine | zgeql2 (m, n, a, lda, tau, work, info) |
| ZGEQL2 computes the QL factorization of a general rectangular matrix using an unblocked algorithm. | |
| subroutine | zgeqlf (m, n, a, lda, tau, work, lwork, info) |
| ZGEQLF | |
| subroutine | zgeqp3 (m, n, a, lda, jpvt, tau, work, lwork, rwork, info) |
| ZGEQP3 | |
| subroutine | zgeqr2 (m, n, a, lda, tau, work, info) |
| ZGEQR2 computes the QR factorization of a general rectangular matrix using an unblocked algorithm. | |
| subroutine | zgeqr2p (m, n, a, lda, tau, work, info) |
| ZGEQR2P computes the QR factorization of a general rectangular matrix with non-negative diagonal elements using an unblocked algorithm. | |
| subroutine | zgeqrf (m, n, a, lda, tau, work, lwork, info) |
| ZGEQRF | |
| subroutine | zgeqrfp (m, n, a, lda, tau, work, lwork, info) |
| ZGEQRFP | |
| subroutine | zgeqrt (m, n, nb, a, lda, t, ldt, work, info) |
| ZGEQRT | |
| subroutine | zgeqrt2 (m, n, a, lda, t, ldt, info) |
| ZGEQRT2 computes a QR factorization of a general real or complex matrix using the compact WY representation of Q. | |
| recursive subroutine | zgeqrt3 (m, n, a, lda, t, ldt, info) |
| ZGEQRT3 recursively computes a QR factorization of a general real or complex matrix using the compact WY representation of Q. | |
| subroutine | zgerfs (trans, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x, ldx, ferr, berr, work, rwork, info) |
| ZGERFS | |
| subroutine | zgerfsx (trans, equed, n, nrhs, a, lda, af, ldaf, ipiv, r, c, b, ldb, x, ldx, rcond, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, rwork, info) |
| ZGERFSX | |
| subroutine | zgerq2 (m, n, a, lda, tau, work, info) |
| ZGERQ2 computes the RQ factorization of a general rectangular matrix using an unblocked algorithm. | |
| subroutine | zgerqf (m, n, a, lda, tau, work, lwork, info) |
| ZGERQF | |
| subroutine | zgesvj (joba, jobu, jobv, m, n, a, lda, sva, mv, v, ldv, cwork, lwork, rwork, lrwork, info) |
| ZGESVJ | |
| subroutine | zgetf2 (m, n, a, lda, ipiv, info) |
| ZGETF2 computes the LU factorization of a general m-by-n matrix using partial pivoting with row interchanges (unblocked algorithm). | |
| subroutine | zgetrf (m, n, a, lda, ipiv, info) |
| ZGETRF | |
| recursive subroutine | zgetrf2 (m, n, a, lda, ipiv, info) |
| ZGETRF2 | |
| subroutine | zgetri (n, a, lda, ipiv, work, lwork, info) |
| ZGETRI | |
| subroutine | zgetrs (trans, n, nrhs, a, lda, ipiv, b, ldb, info) |
| ZGETRS | |
| subroutine | zhgeqz (job, compq, compz, n, ilo, ihi, h, ldh, t, ldt, alpha, beta, q, ldq, z, ldz, work, lwork, rwork, info) |
| ZHGEQZ | |
| subroutine | zla_geamv (trans, m, n, alpha, a, lda, x, incx, beta, y, incy) |
| ZLA_GEAMV computes a matrix-vector product using a general matrix to calculate error bounds. | |
| double precision function | zla_gercond_c (trans, n, a, lda, af, ldaf, ipiv, c, capply, info, work, rwork) |
| ZLA_GERCOND_C computes the infinity norm condition number of op(A)*inv(diag(c)) for general matrices. | |
| double precision function | zla_gercond_x (trans, n, a, lda, af, ldaf, ipiv, x, info, work, rwork) |
| ZLA_GERCOND_X computes the infinity norm condition number of op(A)*diag(x) for general matrices. | |
| subroutine | zla_gerfsx_extended (prec_type, trans_type, n, nrhs, a, lda, af, ldaf, ipiv, colequ, c, b, ldb, y, ldy, berr_out, n_norms, errs_n, errs_c, res, ayb, dy, y_tail, rcond, ithresh, rthresh, dz_ub, ignore_cwise, info) |
| ZLA_GERFSX_EXTENDED | |
| double precision function | zla_gerpvgrw (n, ncols, a, lda, af, ldaf) |
| ZLA_GERPVGRW multiplies a square real matrix by a complex matrix. | |
| recursive subroutine | zlaqz0 (wants, wantq, wantz, n, ilo, ihi, a, lda, b, ldb, alpha, beta, q, ldq, z, ldz, work, lwork, rwork, rec, info) |
| ZLAQZ0 | |
| subroutine | zlaqz1 (ilq, ilz, k, istartm, istopm, ihi, a, lda, b, ldb, nq, qstart, q, ldq, nz, zstart, z, ldz) |
| ZLAQZ1 | |
| recursive subroutine | zlaqz2 (ilschur, ilq, ilz, n, ilo, ihi, nw, a, lda, b, ldb, q, ldq, z, ldz, ns, nd, alpha, beta, qc, ldqc, zc, ldzc, work, lwork, rwork, rec, info) |
| ZLAQZ2 | |
| subroutine | zlaqz3 (ilschur, ilq, ilz, n, ilo, ihi, nshifts, nblock_desired, alpha, beta, a, lda, b, ldb, q, ldq, z, ldz, qc, ldqc, zc, ldzc, work, lwork, info) |
| ZLAQZ3 | |
| subroutine | zlaunhr_col_getrfnp (m, n, a, lda, d, info) |
| ZLAUNHR_COL_GETRFNP | |
| recursive subroutine | zlaunhr_col_getrfnp2 (m, n, a, lda, d, info) |
| ZLAUNHR_COL_GETRFNP2 | |
| subroutine | ztgevc (side, howmny, select, n, s, lds, p, ldp, vl, ldvl, vr, ldvr, mm, m, work, rwork, info) |
| ZTGEVC | |
| subroutine | ztgexc (wantq, wantz, n, a, lda, b, ldb, q, ldq, z, ldz, ifst, ilst, info) |
| ZTGEXC | |
This is the group of complex16 computational functions for GE matrices
| subroutine zgebak | ( | character | job, |
| character | side, | ||
| integer | n, | ||
| integer | ilo, | ||
| integer | ihi, | ||
| double precision, dimension( * ) | scale, | ||
| integer | m, | ||
| complex*16, dimension( ldv, * ) | v, | ||
| integer | ldv, | ||
| integer | info ) |
ZGEBAK
Download ZGEBAK + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEBAK forms the right or left eigenvectors of a complex general !> matrix by backward transformation on the computed eigenvectors of the !> balanced matrix output by ZGEBAL. !>
| [in] | JOB | !> JOB is CHARACTER*1 !> Specifies the type of backward transformation required: !> = 'N': do nothing, return immediately; !> = 'P': do backward transformation for permutation only; !> = 'S': do backward transformation for scaling only; !> = 'B': do backward transformations for both permutation and !> scaling. !> JOB must be the same as the argument JOB supplied to ZGEBAL. !> |
| [in] | SIDE | !> SIDE is CHARACTER*1 !> = 'R': V contains right eigenvectors; !> = 'L': V contains left eigenvectors. !> |
| [in] | N | !> N is INTEGER !> The number of rows of the matrix V. N >= 0. !> |
| [in] | ILO | !> ILO is INTEGER !> |
| [in] | IHI | !> IHI is INTEGER !> The integers ILO and IHI determined by ZGEBAL. !> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0. !> |
| [in] | SCALE | !> SCALE is DOUBLE PRECISION array, dimension (N) !> Details of the permutation and scaling factors, as returned !> by ZGEBAL. !> |
| [in] | M | !> M is INTEGER !> The number of columns of the matrix V. M >= 0. !> |
| [in,out] | V | !> V is COMPLEX*16 array, dimension (LDV,M) !> On entry, the matrix of right or left eigenvectors to be !> transformed, as returned by ZHSEIN or ZTREVC. !> On exit, V is overwritten by the transformed eigenvectors. !> |
| [in] | LDV | !> LDV is INTEGER !> The leading dimension of the array V. LDV >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> |
Definition at line 129 of file zgebak.f.
| subroutine zgebal | ( | character | job, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer | ilo, | ||
| integer | ihi, | ||
| double precision, dimension( * ) | scale, | ||
| integer | info ) |
ZGEBAL
Download ZGEBAL + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEBAL balances a general complex matrix A. This involves, first, !> permuting A by a similarity transformation to isolate eigenvalues !> in the first 1 to ILO-1 and last IHI+1 to N elements on the !> diagonal; and second, applying a diagonal similarity transformation !> to rows and columns ILO to IHI to make the rows and columns as !> close in norm as possible. Both steps are optional. !> !> Balancing may reduce the 1-norm of the matrix, and improve the !> accuracy of the computed eigenvalues and/or eigenvectors. !>
| [in] | JOB | !> JOB is CHARACTER*1 !> Specifies the operations to be performed on A: !> = 'N': none: simply set ILO = 1, IHI = N, SCALE(I) = 1.0 !> for i = 1,...,N; !> = 'P': permute only; !> = 'S': scale only; !> = 'B': both permute and scale. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the input matrix A. !> On exit, A is overwritten by the balanced matrix. !> If JOB = 'N', A is not referenced. !> See Further Details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | ILO | !> ILO is INTEGER !> |
| [out] | IHI | !> IHI is INTEGER !> ILO and IHI are set to INTEGER such that on exit !> A(i,j) = 0 if i > j and j = 1,...,ILO-1 or I = IHI+1,...,N. !> If JOB = 'N' or 'S', ILO = 1 and IHI = N. !> |
| [out] | SCALE | !> SCALE is DOUBLE PRECISION array, dimension (N) !> Details of the permutations and scaling factors applied to !> A. If P(j) is the index of the row and column interchanged !> with row and column j and D(j) is the scaling factor !> applied to row and column j, then !> SCALE(j) = P(j) for j = 1,...,ILO-1 !> = D(j) for j = ILO,...,IHI !> = P(j) for j = IHI+1,...,N. !> The order in which the interchanges are made is N to IHI+1, !> then 1 to ILO-1. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, the i-th argument had an illegal value. !> |
!> !> The permutations consist of row and column interchanges which put !> the matrix in the form !> !> ( T1 X Y ) !> P A P = ( 0 B Z ) !> ( 0 0 T2 ) !> !> where T1 and T2 are upper triangular matrices whose eigenvalues lie !> along the diagonal. The column indices ILO and IHI mark the starting !> and ending columns of the submatrix B. Balancing consists of applying !> a diagonal similarity transformation inv(D) * B * D to make the !> 1-norms of each row of B and its corresponding column nearly equal. !> The output matrix is !> !> ( T1 X*D Y ) !> ( 0 inv(D)*B*D inv(D)*Z ). !> ( 0 0 T2 ) !> !> Information about the permutations P and the diagonal matrix D is !> returned in the vector SCALE. !> !> This subroutine is based on the EISPACK routine CBAL. !> !> Modified by Tzu-Yi Chen, Computer Science Division, University of !> California at Berkeley, USA !>
Definition at line 161 of file zgebal.f.
| subroutine zgebd2 | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| double precision, dimension( * ) | d, | ||
| double precision, dimension( * ) | e, | ||
| complex*16, dimension( * ) | tauq, | ||
| complex*16, dimension( * ) | taup, | ||
| complex*16, dimension( * ) | work, | ||
| integer | info ) |
ZGEBD2 reduces a general matrix to bidiagonal form using an unblocked algorithm.
Download ZGEBD2 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEBD2 reduces a complex general m by n matrix A to upper or lower !> real bidiagonal form B by a unitary transformation: Q**H * A * P = B. !> !> If m >= n, B is upper bidiagonal; if m < n, B is lower bidiagonal. !>
| [in] | M | !> M is INTEGER !> The number of rows in the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns in the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the m by n general matrix to be reduced. !> On exit, !> if m >= n, the diagonal and the first superdiagonal are !> overwritten with the upper bidiagonal matrix B; the !> elements below the diagonal, with the array TAUQ, represent !> the unitary matrix Q as a product of elementary !> reflectors, and the elements above the first superdiagonal, !> with the array TAUP, represent the unitary matrix P as !> a product of elementary reflectors; !> if m < n, the diagonal and the first subdiagonal are !> overwritten with the lower bidiagonal matrix B; the !> elements below the first subdiagonal, with the array TAUQ, !> represent the unitary matrix Q as a product of !> elementary reflectors, and the elements above the diagonal, !> with the array TAUP, represent the unitary matrix P as !> a product of elementary reflectors. !> See Further Details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | D | !> D is DOUBLE PRECISION array, dimension (min(M,N)) !> The diagonal elements of the bidiagonal matrix B: !> D(i) = A(i,i). !> |
| [out] | E | !> E is DOUBLE PRECISION array, dimension (min(M,N)-1) !> The off-diagonal elements of the bidiagonal matrix B: !> if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1; !> if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1. !> |
| [out] | TAUQ | !> TAUQ is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors which !> represent the unitary matrix Q. See Further Details. !> |
| [out] | TAUP | !> TAUP is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors which !> represent the unitary matrix P. See Further Details. !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (max(M,N)) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> |
!> !> The matrices Q and P are represented as products of elementary !> reflectors: !> !> If m >= n, !> !> Q = H(1) H(2) . . . H(n) and P = G(1) G(2) . . . G(n-1) !> !> Each H(i) and G(i) has the form: !> !> H(i) = I - tauq * v * v**H and G(i) = I - taup * u * u**H !> !> where tauq and taup are complex scalars, and v and u are complex !> vectors; v(1:i-1) = 0, v(i) = 1, and v(i+1:m) is stored on exit in !> A(i+1:m,i); u(1:i) = 0, u(i+1) = 1, and u(i+2:n) is stored on exit in !> A(i,i+2:n); tauq is stored in TAUQ(i) and taup in TAUP(i). !> !> If m < n, !> !> Q = H(1) H(2) . . . H(m-1) and P = G(1) G(2) . . . G(m) !> !> Each H(i) and G(i) has the form: !> !> H(i) = I - tauq * v * v**H and G(i) = I - taup * u * u**H !> !> where tauq and taup are complex scalars, v and u are complex vectors; !> v(1:i) = 0, v(i+1) = 1, and v(i+2:m) is stored on exit in A(i+2:m,i); !> u(1:i-1) = 0, u(i) = 1, and u(i+1:n) is stored on exit in A(i,i+1:n); !> tauq is stored in TAUQ(i) and taup in TAUP(i). !> !> The contents of A on exit are illustrated by the following examples: !> !> m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n): !> !> ( d e u1 u1 u1 ) ( d u1 u1 u1 u1 u1 ) !> ( v1 d e u2 u2 ) ( e d u2 u2 u2 u2 ) !> ( v1 v2 d e u3 ) ( v1 e d u3 u3 u3 ) !> ( v1 v2 v3 d e ) ( v1 v2 e d u4 u4 ) !> ( v1 v2 v3 v4 d ) ( v1 v2 v3 e d u5 ) !> ( v1 v2 v3 v4 v5 ) !> !> where d and e denote diagonal and off-diagonal elements of B, vi !> denotes an element of the vector defining H(i), and ui an element of !> the vector defining G(i). !>
Definition at line 188 of file zgebd2.f.
| subroutine zgebrd | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| double precision, dimension( * ) | d, | ||
| double precision, dimension( * ) | e, | ||
| complex*16, dimension( * ) | tauq, | ||
| complex*16, dimension( * ) | taup, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
ZGEBRD
Download ZGEBRD + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEBRD reduces a general complex M-by-N matrix A to upper or lower !> bidiagonal form B by a unitary transformation: Q**H * A * P = B. !> !> If m >= n, B is upper bidiagonal; if m < n, B is lower bidiagonal. !>
| [in] | M | !> M is INTEGER !> The number of rows in the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns in the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N general matrix to be reduced. !> On exit, !> if m >= n, the diagonal and the first superdiagonal are !> overwritten with the upper bidiagonal matrix B; the !> elements below the diagonal, with the array TAUQ, represent !> the unitary matrix Q as a product of elementary !> reflectors, and the elements above the first superdiagonal, !> with the array TAUP, represent the unitary matrix P as !> a product of elementary reflectors; !> if m < n, the diagonal and the first subdiagonal are !> overwritten with the lower bidiagonal matrix B; the !> elements below the first subdiagonal, with the array TAUQ, !> represent the unitary matrix Q as a product of !> elementary reflectors, and the elements above the diagonal, !> with the array TAUP, represent the unitary matrix P as !> a product of elementary reflectors. !> See Further Details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | D | !> D is DOUBLE PRECISION array, dimension (min(M,N)) !> The diagonal elements of the bidiagonal matrix B: !> D(i) = A(i,i). !> |
| [out] | E | !> E is DOUBLE PRECISION array, dimension (min(M,N)-1) !> The off-diagonal elements of the bidiagonal matrix B: !> if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1; !> if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1. !> |
| [out] | TAUQ | !> TAUQ is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors which !> represent the unitary matrix Q. See Further Details. !> |
| [out] | TAUP | !> TAUP is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors which !> represent the unitary matrix P. See Further Details. !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of the array WORK. LWORK >= max(1,M,N). !> For optimum performance LWORK >= (M+N)*NB, where NB !> is the optimal blocksize. !> !> 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. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, the i-th argument had an illegal value. !> |
!> !> The matrices Q and P are represented as products of elementary !> reflectors: !> !> If m >= n, !> !> Q = H(1) H(2) . . . H(n) and P = G(1) G(2) . . . G(n-1) !> !> Each H(i) and G(i) has the form: !> !> H(i) = I - tauq * v * v**H and G(i) = I - taup * u * u**H !> !> where tauq and taup are complex scalars, and v and u are complex !> vectors; v(1:i-1) = 0, v(i) = 1, and v(i+1:m) is stored on exit in !> A(i+1:m,i); u(1:i) = 0, u(i+1) = 1, and u(i+2:n) is stored on exit in !> A(i,i+2:n); tauq is stored in TAUQ(i) and taup in TAUP(i). !> !> If m < n, !> !> Q = H(1) H(2) . . . H(m-1) and P = G(1) G(2) . . . G(m) !> !> Each H(i) and G(i) has the form: !> !> H(i) = I - tauq * v * v**H and G(i) = I - taup * u * u**H !> !> where tauq and taup are complex scalars, and v and u are complex !> vectors; v(1:i) = 0, v(i+1) = 1, and v(i+2:m) is stored on exit in !> A(i+2:m,i); u(1:i-1) = 0, u(i) = 1, and u(i+1:n) is stored on exit in !> A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i). !> !> The contents of A on exit are illustrated by the following examples: !> !> m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n): !> !> ( d e u1 u1 u1 ) ( d u1 u1 u1 u1 u1 ) !> ( v1 d e u2 u2 ) ( e d u2 u2 u2 u2 ) !> ( v1 v2 d e u3 ) ( v1 e d u3 u3 u3 ) !> ( v1 v2 v3 d e ) ( v1 v2 e d u4 u4 ) !> ( v1 v2 v3 v4 d ) ( v1 v2 v3 e d u5 ) !> ( v1 v2 v3 v4 v5 ) !> !> where d and e denote diagonal and off-diagonal elements of B, vi !> denotes an element of the vector defining H(i), and ui an element of !> the vector defining G(i). !>
Definition at line 203 of file zgebrd.f.
| subroutine zgecon | ( | character | norm, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| double precision | anorm, | ||
| double precision | rcond, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | info ) |
ZGECON
Download ZGECON + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGECON estimates the reciprocal of the condition number of a general !> complex matrix A, in either the 1-norm or the infinity-norm, using !> the LU factorization computed by ZGETRF. !> !> An estimate is obtained for norm(inv(A)), and the reciprocal of the !> condition number is computed as !> RCOND = 1 / ( norm(A) * norm(inv(A)) ). !>
| [in] | NORM | !> NORM is CHARACTER*1 !> Specifies whether the 1-norm condition number or the !> infinity-norm condition number is required: !> = '1' or 'O': 1-norm; !> = 'I': Infinity-norm. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> The factors L and U from the factorization A = P*L*U !> as computed by ZGETRF. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | ANORM | !> ANORM is DOUBLE PRECISION !> If NORM = '1' or 'O', the 1-norm of the original matrix A. !> If NORM = 'I', the infinity-norm of the original matrix A. !> |
| [out] | RCOND | !> RCOND is DOUBLE PRECISION !> The reciprocal of the condition number of the matrix A, !> computed as RCOND = 1/(norm(A) * norm(inv(A))). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (2*N) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 122 of file zgecon.f.
| subroutine zgeequ | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| double precision, dimension( * ) | r, | ||
| double precision, dimension( * ) | c, | ||
| double precision | rowcnd, | ||
| double precision | colcnd, | ||
| double precision | amax, | ||
| integer | info ) |
ZGEEQU
Download ZGEEQU + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEEQU computes row and column scalings intended to equilibrate an !> M-by-N matrix A and reduce its condition number. R returns the row !> scale factors and C the column scale factors, chosen to try to make !> the largest element in each row and column of the matrix B with !> elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1. !> !> R(i) and C(j) are restricted to be between SMLNUM = smallest safe !> number and BIGNUM = largest safe number. Use of these scaling !> factors is not guaranteed to reduce the condition number of A but !> works well in practice. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> The M-by-N matrix whose equilibration factors are !> to be computed. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | R | !> R is DOUBLE PRECISION array, dimension (M) !> If INFO = 0 or INFO > M, R contains the row scale factors !> for A. !> |
| [out] | C | !> C is DOUBLE PRECISION array, dimension (N) !> If INFO = 0, C contains the column scale factors for A. !> |
| [out] | ROWCND | !> ROWCND is DOUBLE PRECISION !> If INFO = 0 or INFO > M, ROWCND contains the ratio of the !> smallest R(i) to the largest R(i). If ROWCND >= 0.1 and !> AMAX is neither too large nor too small, it is not worth !> scaling by R. !> |
| [out] | COLCND | !> COLCND is DOUBLE PRECISION !> If INFO = 0, COLCND contains the ratio of the smallest !> C(i) to the largest C(i). If COLCND >= 0.1, it is not !> worth scaling by C. !> |
| [out] | AMAX | !> AMAX is DOUBLE PRECISION !> Absolute value of largest matrix element. If AMAX is very !> close to overflow or very close to underflow, the matrix !> should be scaled. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, and i is !> <= M: the i-th row of A is exactly zero !> > M: the (i-M)-th column of A is exactly zero !> |
Definition at line 138 of file zgeequ.f.
| subroutine zgeequb | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| double precision, dimension( * ) | r, | ||
| double precision, dimension( * ) | c, | ||
| double precision | rowcnd, | ||
| double precision | colcnd, | ||
| double precision | amax, | ||
| integer | info ) |
ZGEEQUB
Download ZGEEQUB + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEEQUB computes row and column scalings intended to equilibrate an !> M-by-N matrix A and reduce its condition number. R returns the row !> scale factors and C the column scale factors, chosen to try to make !> the largest element in each row and column of the matrix B with !> elements B(i,j)=R(i)*A(i,j)*C(j) have an absolute value of at most !> the radix. !> !> R(i) and C(j) are restricted to be a power of the radix between !> SMLNUM = smallest safe number and BIGNUM = largest safe number. Use !> of these scaling factors is not guaranteed to reduce the condition !> number of A but works well in practice. !> !> This routine differs from ZGEEQU by restricting the scaling factors !> to a power of the radix. Barring over- and underflow, scaling by !> these factors introduces no additional rounding errors. However, the !> scaled entries' magnitudes are no longer approximately 1 but lie !> between sqrt(radix) and 1/sqrt(radix). !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> The M-by-N matrix whose equilibration factors are !> to be computed. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | R | !> R is DOUBLE PRECISION array, dimension (M) !> If INFO = 0 or INFO > M, R contains the row scale factors !> for A. !> |
| [out] | C | !> C is DOUBLE PRECISION array, dimension (N) !> If INFO = 0, C contains the column scale factors for A. !> |
| [out] | ROWCND | !> ROWCND is DOUBLE PRECISION !> If INFO = 0 or INFO > M, ROWCND contains the ratio of the !> smallest R(i) to the largest R(i). If ROWCND >= 0.1 and !> AMAX is neither too large nor too small, it is not worth !> scaling by R. !> |
| [out] | COLCND | !> COLCND is DOUBLE PRECISION !> If INFO = 0, COLCND contains the ratio of the smallest !> C(i) to the largest C(i). If COLCND >= 0.1, it is not !> worth scaling by C. !> |
| [out] | AMAX | !> AMAX is DOUBLE PRECISION !> Absolute value of largest matrix element. If AMAX is very !> close to overflow or very close to underflow, the matrix !> should be scaled. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, and i is !> <= M: the i-th row of A is exactly zero !> > M: the (i-M)-th column of A is exactly zero !> |
Definition at line 145 of file zgeequb.f.
| subroutine zgehd2 | ( | integer | n, |
| integer | ilo, | ||
| integer | ihi, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | info ) |
ZGEHD2 reduces a general square matrix to upper Hessenberg form using an unblocked algorithm.
Download ZGEHD2 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEHD2 reduces a complex general matrix A to upper Hessenberg form H !> by a unitary similarity transformation: Q**H * A * Q = H . !>
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | ILO | !> ILO is INTEGER !> |
| [in] | IHI | !> IHI is INTEGER !> !> It is assumed that A is already upper triangular in rows !> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally !> set by a previous call to ZGEBAL; otherwise they should be !> set to 1 and N respectively. See Further Details. !> 1 <= ILO <= IHI <= max(1,N). !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the n by n general matrix to be reduced. !> On exit, the upper triangle and the first subdiagonal of A !> are overwritten with the upper Hessenberg matrix H, and the !> elements below the first subdiagonal, with the array TAU, !> represent the unitary matrix Q as a product of elementary !> reflectors. See Further Details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (N-1) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> |
!> !> The matrix Q is represented as a product of (ihi-ilo) elementary !> reflectors !> !> Q = H(ilo) H(ilo+1) . . . H(ihi-1). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(1:i) = 0, v(i+1) = 1 and v(ihi+1:n) = 0; v(i+2:ihi) is stored on !> exit in A(i+2:ihi,i), and tau in TAU(i). !> !> The contents of A are illustrated by the following example, with !> n = 7, ilo = 2 and ihi = 6: !> !> on entry, on exit, !> !> ( a a a a a a a ) ( a a h h h h a ) !> ( a a a a a a ) ( a h h h h a ) !> ( a a a a a a ) ( h h h h h h ) !> ( a a a a a a ) ( v2 h h h h h ) !> ( a a a a a a ) ( v2 v3 h h h h ) !> ( a a a a a a ) ( v2 v3 v4 h h h ) !> ( a ) ( a ) !> !> where a denotes an element of the original matrix A, h denotes a !> modified element of the upper Hessenberg matrix H, and vi denotes an !> element of the vector defining H(i). !>
Definition at line 148 of file zgehd2.f.
| subroutine zgehrd | ( | integer | n, |
| integer | ilo, | ||
| integer | ihi, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
ZGEHRD
Download ZGEHRD + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEHRD reduces a complex general matrix A to upper Hessenberg form H by !> an unitary similarity transformation: Q**H * A * Q = H . !>
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | ILO | !> ILO is INTEGER !> |
| [in] | IHI | !> IHI is INTEGER !> !> It is assumed that A is already upper triangular in rows !> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally !> set by a previous call to ZGEBAL; otherwise they should be !> set to 1 and N respectively. See Further Details. !> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the N-by-N general matrix to be reduced. !> On exit, the upper triangle and the first subdiagonal of A !> are overwritten with the upper Hessenberg matrix H, and the !> elements below the first subdiagonal, with the array TAU, !> represent the unitary matrix Q as a product of elementary !> reflectors. See Further Details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (N-1) !> The scalar factors of the elementary reflectors (see Further !> Details). Elements 1:ILO-1 and IHI:N-1 of TAU are set to !> zero. !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (LWORK) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of the array WORK. LWORK >= max(1,N). !> For good performance, LWORK should generally be larger. !> !> 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. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> |
!> !> The matrix Q is represented as a product of (ihi-ilo) elementary !> reflectors !> !> Q = H(ilo) H(ilo+1) . . . H(ihi-1). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(1:i) = 0, v(i+1) = 1 and v(ihi+1:n) = 0; v(i+2:ihi) is stored on !> exit in A(i+2:ihi,i), and tau in TAU(i). !> !> The contents of A are illustrated by the following example, with !> n = 7, ilo = 2 and ihi = 6: !> !> on entry, on exit, !> !> ( a a a a a a a ) ( a a h h h h a ) !> ( a a a a a a ) ( a h h h h a ) !> ( a a a a a a ) ( h h h h h h ) !> ( a a a a a a ) ( v2 h h h h h ) !> ( a a a a a a ) ( v2 v3 h h h h ) !> ( a a a a a a ) ( v2 v3 v4 h h h ) !> ( a ) ( a ) !> !> where a denotes an element of the original matrix A, h denotes a !> modified element of the upper Hessenberg matrix H, and vi denotes an !> element of the vector defining H(i). !> !> This file is a slight modification of LAPACK-3.0's ZGEHRD !> subroutine incorporating improvements proposed by Quintana-Orti and !> Van de Geijn (2006). (See ZLAHR2.) !>
Definition at line 166 of file zgehrd.f.
| subroutine zgelq2 | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | info ) |
ZGELQ2 computes the LQ factorization of a general rectangular matrix using an unblocked algorithm.
Download ZGELQ2 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGELQ2 computes an LQ factorization of a complex m-by-n matrix A: !> !> A = ( L 0 ) * Q !> !> where: !> !> Q is a n-by-n orthogonal matrix; !> L is a lower-triangular m-by-m matrix; !> 0 is a m-by-(n-m) zero matrix, if m < n. !> !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the m by n matrix A. !> On exit, the elements on and below the diagonal of the array !> contain the m by min(m,n) lower trapezoidal matrix L (L is !> lower triangular if m <= n); the elements above the diagonal, !> with the array TAU, represent the unitary matrix Q as a !> product of elementary reflectors (see Further Details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (M) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix Q is represented as a product of elementary reflectors !> !> Q = H(k)**H . . . H(2)**H H(1)**H, where k = min(m,n). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(1:i-1) = 0 and v(i) = 1; conjg(v(i+1:n)) is stored on exit in !> A(i,i+1:n), and tau in TAU(i). !>
Definition at line 128 of file zgelq2.f.
| subroutine zgelqf | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
ZGELQF
Download ZGELQF + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGELQF computes an LQ factorization of a complex M-by-N matrix A: !> !> A = ( L 0 ) * Q !> !> where: !> !> Q is a N-by-N orthogonal matrix; !> L is a lower-triangular M-by-M matrix; !> 0 is a M-by-(N-M) zero matrix, if M < N. !> !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N matrix A. !> On exit, the elements on and below the diagonal of the array !> contain the m-by-min(m,n) lower trapezoidal matrix L (L is !> lower triangular if m <= n); the elements above the diagonal, !> with the array TAU, represent the unitary matrix Q as a !> product of elementary reflectors (see Further Details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= max(1,M). !> For optimum performance LWORK >= M*NB, where NB is the !> optimal blocksize. !> !> 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. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix Q is represented as a product of elementary reflectors !> !> Q = H(k)**H . . . H(2)**H H(1)**H, where k = min(m,n). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(1:i-1) = 0 and v(i) = 1; conjg(v(i+1:n)) is stored on exit in !> A(i,i+1:n), and tau in TAU(i). !>
Definition at line 142 of file zgelqf.f.
| subroutine zgemqrt | ( | character | side, |
| character | trans, | ||
| integer | m, | ||
| integer | n, | ||
| integer | k, | ||
| integer | nb, | ||
| complex*16, dimension( ldv, * ) | v, | ||
| integer | ldv, | ||
| complex*16, dimension( ldt, * ) | t, | ||
| integer | ldt, | ||
| complex*16, dimension( ldc, * ) | c, | ||
| integer | ldc, | ||
| complex*16, dimension( * ) | work, | ||
| integer | info ) |
ZGEMQRT
Download ZGEMQRT + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEMQRT overwrites the general complex M-by-N matrix C with !> !> SIDE = 'L' SIDE = 'R' !> TRANS = 'N': Q C C Q !> TRANS = 'C': Q**H C C Q**H !> !> where Q is a complex orthogonal matrix defined as the product of K !> elementary reflectors: !> !> Q = H(1) H(2) . . . H(K) = I - V T V**H !> !> generated using the compact WY representation as returned by ZGEQRT. !> !> Q is of order M if SIDE = 'L' and of order N if SIDE = 'R'. !>
| [in] | SIDE | !> SIDE is CHARACTER*1 !> = 'L': apply Q or Q**H from the Left; !> = 'R': apply Q or Q**H from the Right. !> |
| [in] | TRANS | !> TRANS is CHARACTER*1 !> = 'N': No transpose, apply Q; !> = 'C': Conjugate transpose, apply Q**H. !> |
| [in] | M | !> M is INTEGER !> The number of rows of the matrix C. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix C. N >= 0. !> |
| [in] | K | !> K is INTEGER !> The number of elementary reflectors whose product defines !> the matrix Q. !> If SIDE = 'L', M >= K >= 0; !> if SIDE = 'R', N >= K >= 0. !> |
| [in] | NB | !> NB is INTEGER !> The block size used for the storage of T. K >= NB >= 1. !> This must be the same value of NB used to generate T !> in ZGEQRT. !> |
| [in] | V | !> V is COMPLEX*16 array, dimension (LDV,K) !> The i-th column must contain the vector which defines the !> elementary reflector H(i), for i = 1,2,...,k, as returned by !> ZGEQRT in the first K columns of its array argument A. !> |
| [in] | LDV | !> LDV is INTEGER !> The leading dimension of the array V. !> If SIDE = 'L', LDA >= max(1,M); !> if SIDE = 'R', LDA >= max(1,N). !> |
| [in] | T | !> T is COMPLEX*16 array, dimension (LDT,K) !> The upper triangular factors of the block reflectors !> as returned by ZGEQRT, stored as a NB-by-N matrix. !> |
| [in] | LDT | !> LDT is INTEGER !> The leading dimension of the array T. LDT >= NB. !> |
| [in,out] | C | !> C is COMPLEX*16 array, dimension (LDC,N) !> On entry, the M-by-N matrix C. !> On exit, C is overwritten by Q C, Q**H C, C Q**H or C Q. !> |
| [in] | LDC | !> LDC is INTEGER !> The leading dimension of the array C. LDC >= max(1,M). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array. The dimension of WORK is !> N*NB if SIDE = 'L', or M*NB if SIDE = 'R'. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 166 of file zgemqrt.f.
| subroutine zgeql2 | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | info ) |
ZGEQL2 computes the QL factorization of a general rectangular matrix using an unblocked algorithm.
Download ZGEQL2 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEQL2 computes a QL factorization of a complex m by n matrix A: !> A = Q * L. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the m by n matrix A. !> On exit, if m >= n, the lower triangle of the subarray !> A(m-n+1:m,1:n) contains the n by n lower triangular matrix L; !> if m <= n, the elements on and below the (n-m)-th !> superdiagonal contain the m by n lower trapezoidal matrix L; !> the remaining elements, with the array TAU, represent the !> unitary matrix Q as a product of elementary reflectors !> (see Further Details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix Q is represented as a product of elementary reflectors !> !> Q = H(k) . . . H(2) H(1), where k = min(m,n). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(m-k+i+1:m) = 0 and v(m-k+i) = 1; v(1:m-k+i-1) is stored on exit in !> A(1:m-k+i-1,n-k+i), and tau in TAU(i). !>
Definition at line 122 of file zgeql2.f.
| subroutine zgeqlf | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
ZGEQLF
Download ZGEQLF + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEQLF computes a QL factorization of a complex M-by-N matrix A: !> A = Q * L. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N matrix A. !> On exit, !> if m >= n, the lower triangle of the subarray !> A(m-n+1:m,1:n) contains the N-by-N lower triangular matrix L; !> if m <= n, the elements on and below the (n-m)-th !> superdiagonal contain the M-by-N lower trapezoidal matrix L; !> the remaining elements, with the array TAU, represent the !> unitary matrix Q as a product of elementary reflectors !> (see Further Details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= max(1,N). !> For optimum performance LWORK >= N*NB, where NB is !> the optimal blocksize. !> !> 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. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix Q is represented as a product of elementary reflectors !> !> Q = H(k) . . . H(2) H(1), where k = min(m,n). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(m-k+i+1:m) = 0 and v(m-k+i) = 1; v(1:m-k+i-1) is stored on exit in !> A(1:m-k+i-1,n-k+i), and tau in TAU(i). !>
Definition at line 137 of file zgeqlf.f.
| subroutine zgeqp3 | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | jpvt, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | info ) |
ZGEQP3
Download ZGEQP3 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEQP3 computes a QR factorization with column pivoting of a !> matrix A: A*P = Q*R using Level 3 BLAS. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N matrix A. !> On exit, the upper triangle of the array contains the !> min(M,N)-by-N upper trapezoidal matrix R; the elements below !> the diagonal, together with the array TAU, represent the !> unitary matrix Q as a product of min(M,N) elementary !> reflectors. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [in,out] | JPVT | !> JPVT is INTEGER array, dimension (N) !> On entry, if JPVT(J).ne.0, the J-th column of A is permuted !> to the front of A*P (a leading column); if JPVT(J)=0, !> the J-th column of A is a free column. !> On exit, if JPVT(J)=K, then the J-th column of A*P was the !> the K-th column of A. !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors. !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO=0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= N+1. !> For optimal performance LWORK >= ( N+1 )*NB, where NB !> is the optimal blocksize. !> !> 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. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, the i-th argument had an illegal value. !> |
!> !> The matrix Q is represented as a product of elementary reflectors !> !> Q = H(1) H(2) . . . H(k), where k = min(m,n). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a real/complex vector !> with v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in !> A(i+1:m,i), and tau in TAU(i). !>
Definition at line 157 of file zgeqp3.f.
| subroutine zgeqpf | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | jpvt, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | info ) |
ZGEQPF
Download ZGEQPF + dependencies [TGZ] [ZIP] [TXT]
!> !> This routine is deprecated and has been replaced by routine ZGEQP3. !> !> ZGEQPF computes a QR factorization with column pivoting of a !> complex M-by-N matrix A: A*P = Q*R. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0 !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N matrix A. !> On exit, the upper triangle of the array contains the !> min(M,N)-by-N upper triangular matrix R; the elements !> below the diagonal, together with the array TAU, !> represent the unitary matrix Q as a product of !> min(m,n) elementary reflectors. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [in,out] | JPVT | !> JPVT is INTEGER array, dimension (N) !> On entry, if JPVT(i) .ne. 0, the i-th column of A is permuted !> to the front of A*P (a leading column); if JPVT(i) = 0, !> the i-th column of A is a free column. !> On exit, if JPVT(i) = k, then the i-th column of A*P !> was the k-th column of A. !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors. !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (N) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix Q is represented as a product of elementary reflectors !> !> Q = H(1) H(2) . . . H(n) !> !> Each H(i) has the form !> !> H = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i). !> !> The matrix P is represented in jpvt as follows: If !> jpvt(j) = i !> then the jth column of P is the ith canonical unit vector. !> !> Partial column norm updating strategy modified by !> Z. Drmac and Z. Bujanovic, Dept. of Mathematics, !> University of Zagreb, Croatia. !> -- April 2011 -- !> For more details see LAPACK Working Note 176. !>
Definition at line 147 of file zgeqpf.f.
| subroutine zgeqr2 | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | info ) |
ZGEQR2 computes the QR factorization of a general rectangular matrix using an unblocked algorithm.
Download ZGEQR2 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEQR2 computes a QR factorization of a complex m-by-n matrix A: !> !> A = Q * ( R ), !> ( 0 ) !> !> where: !> !> Q is a m-by-m orthogonal matrix; !> R is an upper-triangular n-by-n matrix; !> 0 is a (m-n)-by-n zero matrix, if m > n. !> !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the m by n matrix A. !> On exit, the elements on and above the diagonal of the array !> contain the min(m,n) by n upper trapezoidal matrix R (R is !> upper triangular if m >= n); the elements below the diagonal, !> with the array TAU, represent the unitary matrix Q as a !> product of elementary reflectors (see Further Details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix Q is represented as a product of elementary reflectors !> !> Q = H(1) H(2) . . . H(k), where k = min(m,n). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i), !> and tau in TAU(i). !>
Definition at line 129 of file zgeqr2.f.
| subroutine zgeqr2p | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | info ) |
ZGEQR2P computes the QR factorization of a general rectangular matrix with non-negative diagonal elements using an unblocked algorithm.
Download ZGEQR2P + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEQR2P computes a QR factorization of a complex m-by-n matrix A: !> !> A = Q * ( R ), !> ( 0 ) !> !> where: !> !> Q is a m-by-m orthogonal matrix; !> R is an upper-triangular n-by-n matrix with nonnegative diagonal !> entries; !> 0 is a (m-n)-by-n zero matrix, if m > n. !> !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the m by n matrix A. !> On exit, the elements on and above the diagonal of the array !> contain the min(m,n) by n upper trapezoidal matrix R (R is !> upper triangular if m >= n). The diagonal entries of R !> are real and nonnegative; the elements below the diagonal, !> with the array TAU, represent the unitary matrix Q as a !> product of elementary reflectors (see Further Details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix Q is represented as a product of elementary reflectors !> !> Q = H(1) H(2) . . . H(k), where k = min(m,n). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i), !> and tau in TAU(i). !> !> See Lapack Working Note 203 for details !>
Definition at line 133 of file zgeqr2p.f.
| subroutine zgeqrf | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
ZGEQRF
Download ZGEQRF + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEQRF computes a QR factorization of a complex M-by-N matrix A: !> !> A = Q * ( R ), !> ( 0 ) !> !> where: !> !> Q is a M-by-M orthogonal matrix; !> R is an upper-triangular N-by-N matrix; !> 0 is a (M-N)-by-N zero matrix, if M > N. !> !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N matrix A. !> On exit, the elements on and above the diagonal of the array !> contain the min(M,N)-by-N upper trapezoidal matrix R (R is !> upper triangular if m >= n); the elements below the diagonal, !> with the array TAU, represent the unitary matrix Q as a !> product of min(m,n) elementary reflectors (see Further !> Details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. !> LWORK >= 1, if MIN(M,N) = 0, and LWORK >= N, otherwise. !> For optimum performance LWORK >= N*NB, where NB is !> the optimal blocksize. !> !> 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. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix Q is represented as a product of elementary reflectors !> !> Q = H(1) H(2) . . . H(k), where k = min(m,n). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i), !> and tau in TAU(i). !>
Definition at line 145 of file zgeqrf.f.
| subroutine zgeqrfp | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
ZGEQRFP
Download ZGEQRFP + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEQR2P computes a QR factorization of a complex M-by-N matrix A: !> !> A = Q * ( R ), !> ( 0 ) !> !> where: !> !> Q is a M-by-M orthogonal matrix; !> R is an upper-triangular N-by-N matrix with nonnegative diagonal !> entries; !> 0 is a (M-N)-by-N zero matrix, if M > N. !> !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N matrix A. !> On exit, the elements on and above the diagonal of the array !> contain the min(M,N)-by-N upper trapezoidal matrix R (R is !> upper triangular if m >= n). The diagonal entries of R !> are real and nonnegative; The elements below the diagonal, !> with the array TAU, represent the unitary matrix Q as a !> product of min(m,n) elementary reflectors (see Further !> Details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= max(1,N). !> For optimum performance LWORK >= N*NB, where NB is !> the optimal blocksize. !> !> 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. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix Q is represented as a product of elementary reflectors !> !> Q = H(1) H(2) . . . H(k), where k = min(m,n). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i), !> and tau in TAU(i). !> !> See Lapack Working Note 203 for details !>
Definition at line 148 of file zgeqrfp.f.
| subroutine zgeqrt | ( | integer | m, |
| integer | n, | ||
| integer | nb, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( ldt, * ) | t, | ||
| integer | ldt, | ||
| complex*16, dimension( * ) | work, | ||
| integer | info ) |
ZGEQRT
Download ZGEQRT + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEQRT computes a blocked QR factorization of a complex M-by-N matrix A !> using the compact WY representation of Q. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in] | NB | !> NB is INTEGER !> The block size to be used in the blocked QR. MIN(M,N) >= NB >= 1. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N matrix A. !> On exit, the elements on and above the diagonal of the array !> contain the min(M,N)-by-N upper trapezoidal matrix R (R is !> upper triangular if M >= N); the elements below the diagonal !> are the columns of V. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | T | !> T is COMPLEX*16 array, dimension (LDT,MIN(M,N)) !> The upper triangular block reflectors stored in compact form !> as a sequence of upper triangular blocks. See below !> for further details. !> |
| [in] | LDT | !> LDT is INTEGER !> The leading dimension of the array T. LDT >= NB. !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (NB*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix V stores the elementary reflectors H(i) in the i-th column !> below the diagonal. For example, if M=5 and N=3, the matrix V is !> !> V = ( 1 ) !> ( v1 1 ) !> ( v1 v2 1 ) !> ( v1 v2 v3 ) !> ( v1 v2 v3 ) !> !> where the vi's represent the vectors which define H(i), which are returned !> in the matrix A. The 1's along the diagonal of V are not stored in A. !> !> Let K=MIN(M,N). The number of blocks is B = ceiling(K/NB), where each !> block is of order NB except for the last block, which is of order !> IB = K - (B-1)*NB. For each of the B blocks, a upper triangular block !> reflector factor is computed: T1, T2, ..., TB. The NB-by-NB (and IB-by-IB !> for the last block) T's are stored in the NB-by-K matrix T as !> !> T = (T1 T2 ... TB). !>
Definition at line 140 of file zgeqrt.f.
| subroutine zgeqrt2 | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( ldt, * ) | t, | ||
| integer | ldt, | ||
| integer | info ) |
ZGEQRT2 computes a QR factorization of a general real or complex matrix using the compact WY representation of Q.
Download ZGEQRT2 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEQRT2 computes a QR factorization of a complex M-by-N matrix A, !> using the compact WY representation of Q. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= N. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the complex M-by-N matrix A. On exit, the elements on and !> above the diagonal contain the N-by-N upper triangular matrix R; the !> elements below the diagonal are the columns of V. See below for !> further details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | T | !> T is COMPLEX*16 array, dimension (LDT,N) !> The N-by-N upper triangular factor of the block reflector. !> The elements on and above the diagonal contain the block !> reflector T; the elements below the diagonal are not used. !> See below for further details. !> |
| [in] | LDT | !> LDT is INTEGER !> The leading dimension of the array T. LDT >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix V stores the elementary reflectors H(i) in the i-th column !> below the diagonal. For example, if M=5 and N=3, the matrix V is !> !> V = ( 1 ) !> ( v1 1 ) !> ( v1 v2 1 ) !> ( v1 v2 v3 ) !> ( v1 v2 v3 ) !> !> where the vi's represent the vectors which define H(i), which are returned !> in the matrix A. The 1's along the diagonal of V are not stored in A. The !> block reflector H is then given by !> !> H = I - V * T * V**H !> !> where V**H is the conjugate transpose of V. !>
Definition at line 126 of file zgeqrt2.f.
| recursive subroutine zgeqrt3 | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( ldt, * ) | t, | ||
| integer | ldt, | ||
| integer | info ) |
ZGEQRT3 recursively computes a QR factorization of a general real or complex matrix using the compact WY representation of Q.
Download ZGEQRT3 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGEQRT3 recursively computes a QR factorization of a complex M-by-N !> matrix A, using the compact WY representation of Q. !> !> Based on the algorithm of Elmroth and Gustavson, !> IBM J. Res. Develop. Vol 44 No. 4 July 2000. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= N. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the complex M-by-N matrix A. On exit, the elements on !> and above the diagonal contain the N-by-N upper triangular matrix R; !> the elements below the diagonal are the columns of V. See below for !> further details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | T | !> T is COMPLEX*16 array, dimension (LDT,N) !> The N-by-N upper triangular factor of the block reflector. !> The elements on and above the diagonal contain the block !> reflector T; the elements below the diagonal are not used. !> See below for further details. !> |
| [in] | LDT | !> LDT is INTEGER !> The leading dimension of the array T. LDT >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix V stores the elementary reflectors H(i) in the i-th column !> below the diagonal. For example, if M=5 and N=3, the matrix V is !> !> V = ( 1 ) !> ( v1 1 ) !> ( v1 v2 1 ) !> ( v1 v2 v3 ) !> ( v1 v2 v3 ) !> !> where the vi's represent the vectors which define H(i), which are returned !> in the matrix A. The 1's along the diagonal of V are not stored in A. The !> block reflector H is then given by !> !> H = I - V * T * V**H !> !> where V**H is the conjugate transpose of V. !> !> For details of the algorithm, see Elmroth and Gustavson (cited above). !>
Definition at line 131 of file zgeqrt3.f.
| subroutine zgerfs | ( | character | trans, |
| integer | n, | ||
| integer | nrhs, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| complex*16, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex*16, dimension( ldx, * ) | x, | ||
| integer | ldx, | ||
| double precision, dimension( * ) | ferr, | ||
| double precision, dimension( * ) | berr, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | info ) |
ZGERFS
Download ZGERFS + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGERFS improves the computed solution to a system of linear !> equations and provides error bounds and backward error estimates for !> the solution. !>
| [in] | TRANS | !> TRANS is CHARACTER*1 !> Specifies the form of the system of equations: !> = 'N': A * X = B (No transpose) !> = 'T': A**T * X = B (Transpose) !> = 'C': A**H * X = B (Conjugate transpose) !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrices B and X. NRHS >= 0. !> |
| [in] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> The original N-by-N matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is COMPLEX*16 array, dimension (LDAF,N) !> The factors L and U from the factorization A = P*L*U !> as computed by ZGETRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> The pivot indices from ZGETRF; for 1<=i<=N, row i of the !> matrix was interchanged with row IPIV(i). !> |
| [in] | B | !> B is COMPLEX*16 array, dimension (LDB,NRHS) !> The right hand side matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | X | !> X is COMPLEX*16 array, dimension (LDX,NRHS) !> On entry, the solution matrix X, as computed by ZGETRS. !> On exit, the improved solution matrix X. !> |
| [in] | LDX | !> LDX is INTEGER !> The leading dimension of the array X. LDX >= max(1,N). !> |
| [out] | FERR | !> FERR is DOUBLE PRECISION array, dimension (NRHS) !> The estimated forward error bound for each solution vector !> X(j) (the j-th column of the solution matrix X). !> If XTRUE is the true solution corresponding to X(j), FERR(j) !> is an estimated upper bound for the magnitude of the largest !> element in (X(j) - XTRUE) divided by the magnitude of the !> largest element in X(j). The estimate is as reliable as !> the estimate for RCOND, and is almost always a slight !> overestimate of the true error. !> |
| [out] | BERR | !> BERR is DOUBLE PRECISION array, dimension (NRHS) !> The componentwise relative backward error of each solution !> vector X(j) (i.e., the smallest relative change in !> any element of A or B that makes X(j) an exact solution). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (2*N) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> ITMAX is the maximum number of steps of iterative refinement. !>
Definition at line 184 of file zgerfs.f.
| subroutine zgerfsx | ( | character | trans, |
| character | equed, | ||
| integer | n, | ||
| integer | nrhs, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| double precision, dimension( * ) | r, | ||
| double precision, dimension( * ) | c, | ||
| complex*16, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex*16, dimension( ldx , * ) | x, | ||
| integer | ldx, | ||
| double precision | rcond, | ||
| double precision, dimension( * ) | berr, | ||
| integer | n_err_bnds, | ||
| double precision, dimension( nrhs, * ) | err_bnds_norm, | ||
| double precision, dimension( nrhs, * ) | err_bnds_comp, | ||
| integer | nparams, | ||
| double precision, dimension( * ) | params, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | info ) |
ZGERFSX
Download ZGERFSX + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGERFSX improves the computed solution to a system of linear !> equations and provides error bounds and backward error estimates !> for the solution. In addition to normwise error bound, the code !> provides maximum componentwise error bound if possible. See !> comments for ERR_BNDS_NORM and ERR_BNDS_COMP for details of the !> error bounds. !> !> The original system of linear equations may have been equilibrated !> before calling this routine, as described by arguments EQUED, R !> and C below. In this case, the solution and error bounds returned !> are for the original unequilibrated system. !>
!> Some optional parameters are bundled in the PARAMS array. These !> settings determine how refinement is performed, but often the !> defaults are acceptable. If the defaults are acceptable, users !> can pass NPARAMS = 0 which prevents the source code from accessing !> the PARAMS argument. !>
| [in] | TRANS | !> TRANS is CHARACTER*1 !> Specifies the form of the system of equations: !> = 'N': A * X = B (No transpose) !> = 'T': A**T * X = B (Transpose) !> = 'C': A**H * X = B (Conjugate transpose) !> |
| [in] | EQUED | !> EQUED is CHARACTER*1 !> Specifies the form of equilibration that was done to A !> before calling this routine. This is needed to compute !> the solution and error bounds correctly. !> = 'N': No equilibration !> = 'R': Row equilibration, i.e., A has been premultiplied by !> diag(R). !> = 'C': Column equilibration, i.e., A has been postmultiplied !> by diag(C). !> = 'B': Both row and column equilibration, i.e., A has been !> replaced by diag(R) * A * diag(C). !> The right hand side B has been changed accordingly. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrices B and X. NRHS >= 0. !> |
| [in] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> The original N-by-N matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is COMPLEX*16 array, dimension (LDAF,N) !> The factors L and U from the factorization A = P*L*U !> as computed by ZGETRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> The pivot indices from ZGETRF; for 1<=i<=N, row i of the !> matrix was interchanged with row IPIV(i). !> |
| [in] | R | !> R is DOUBLE PRECISION array, dimension (N) !> The row scale factors for A. If EQUED = 'R' or 'B', A is !> multiplied on the left by diag(R); if EQUED = 'N' or 'C', R !> is not accessed. !> If R is accessed, each element of R should be a power of the radix !> to ensure a reliable solution and error estimates. Scaling by !> powers of the radix does not cause rounding errors unless the !> result underflows or overflows. Rounding errors during scaling !> lead to refining with a matrix that is not equivalent to the !> input matrix, producing error estimates that may not be !> reliable. !> |
| [in] | C | !> C is DOUBLE PRECISION array, dimension (N) !> The column scale factors for A. If EQUED = 'C' or 'B', A is !> multiplied on the right by diag(C); if EQUED = 'N' or 'R', C !> is not accessed. !> If C is accessed, each element of C should be a power of the radix !> to ensure a reliable solution and error estimates. Scaling by !> powers of the radix does not cause rounding errors unless the !> result underflows or overflows. Rounding errors during scaling !> lead to refining with a matrix that is not equivalent to the !> input matrix, producing error estimates that may not be !> reliable. !> |
| [in] | B | !> B is COMPLEX*16 array, dimension (LDB,NRHS) !> The right hand side matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | X | !> X is COMPLEX*16 array, dimension (LDX,NRHS) !> On entry, the solution matrix X, as computed by ZGETRS. !> On exit, the improved solution matrix X. !> |
| [in] | LDX | !> LDX is INTEGER !> The leading dimension of the array X. LDX >= max(1,N). !> |
| [out] | RCOND | !> RCOND is DOUBLE PRECISION !> Reciprocal scaled condition number. This is an estimate of the !> reciprocal Skeel condition number of the matrix A after !> equilibration (if done). If this is less than the machine !> precision (in particular, if it is zero), the matrix is singular !> to working precision. Note that the error may still be small even !> if this number is very small and the matrix appears ill- !> conditioned. !> |
| [out] | BERR | !> BERR is DOUBLE PRECISION array, dimension (NRHS) !> Componentwise relative backward error. This is the !> componentwise relative backward error of each solution vector X(j) !> (i.e., the smallest relative change in any element of A or B that !> makes X(j) an exact solution). !> |
| [in] | N_ERR_BNDS | !> N_ERR_BNDS is INTEGER !> Number of error bounds to return for each right hand side !> and each type (normwise or componentwise). See ERR_BNDS_NORM and !> ERR_BNDS_COMP below. !> |
| [out] | ERR_BNDS_NORM | !> ERR_BNDS_NORM is DOUBLE PRECISION array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand side, this array contains information about
!> various error bounds and condition numbers corresponding to the
!> normwise relative error, which is defined as follows:
!>
!> Normwise relative error in the ith solution vector:
!> max_j (abs(XTRUE(j,i) - X(j,i)))
!> ------------------------------
!> max_j abs(X(j,i))
!>
!> The array is indexed by the type of error information as described
!> below. There currently are up to three pieces of information
!> returned.
!>
!> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERR_BNDS_NORM(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * dlamch('Epsilon').
!>
!> err = 2 error bound: The estimated forward error,
!> almost certainly within a factor of 10 of the true error
!> so long as the next entry is greater than the threshold
!> sqrt(n) * dlamch('Epsilon'). This error bound should only
!> be trusted if the previous boolean is true.
!>
!> err = 3 Reciprocal condition number: Estimated normwise
!> reciprocal condition number. Compared with the threshold
!> sqrt(n) * dlamch('Epsilon') to determine if the error
!> estimate is . These reciprocal condition
!> numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for some
!> appropriately scaled matrix Z.
!> Let Z = S*A, where S scales each row by a power of the
!> radix so all absolute row sums of Z are approximately 1.
!>
!> See Lapack Working Note 165 for further details and extra
!> cautions.
!> |
| [out] | ERR_BNDS_COMP | !> ERR_BNDS_COMP is DOUBLE PRECISION array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand side, this array contains information about
!> various error bounds and condition numbers corresponding to the
!> componentwise relative error, which is defined as follows:
!>
!> Componentwise relative error in the ith solution vector:
!> abs(XTRUE(j,i) - X(j,i))
!> max_j ----------------------
!> abs(X(j,i))
!>
!> The array is indexed by the right-hand side i (on which the
!> componentwise relative error depends), and the type of error
!> information as described below. There currently are up to three
!> pieces of information returned for each right-hand side. If
!> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
!> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS < 3, then at most
!> the first (:,N_ERR_BNDS) entries are returned.
!>
!> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERR_BNDS_COMP(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * dlamch('Epsilon').
!>
!> err = 2 error bound: The estimated forward error,
!> almost certainly within a factor of 10 of the true error
!> so long as the next entry is greater than the threshold
!> sqrt(n) * dlamch('Epsilon'). This error bound should only
!> be trusted if the previous boolean is true.
!>
!> err = 3 Reciprocal condition number: Estimated componentwise
!> reciprocal condition number. Compared with the threshold
!> sqrt(n) * dlamch('Epsilon') to determine if the error
!> estimate is . These reciprocal condition
!> numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for some
!> appropriately scaled matrix Z.
!> Let Z = S*(A*diag(x)), where x is the solution for the
!> current right-hand side and S scales each row of
!> A*diag(x) by a power of the radix so all absolute row
!> sums of Z are approximately 1.
!>
!> See Lapack Working Note 165 for further details and extra
!> cautions.
!> |
| [in] | NPARAMS | !> NPARAMS is INTEGER !> Specifies the number of parameters set in PARAMS. If <= 0, the !> PARAMS array is never referenced and default values are used. !> |
| [in,out] | PARAMS | !> PARAMS is DOUBLE PRECISION array, dimension NPARAMS !> Specifies algorithm parameters. If an entry is < 0.0, then !> that entry will be filled with default value used for that !> parameter. Only positions up to NPARAMS are accessed; defaults !> are used for higher-numbered parameters. !> !> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative !> refinement or not. !> Default: 1.0D+0 !> = 0.0: No refinement is performed, and no error bounds are !> computed. !> = 1.0: Use the double-precision refinement algorithm, !> possibly with doubled-single computations if the !> compilation environment does not support DOUBLE !> PRECISION. !> (other values are reserved for future use) !> !> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual !> computations allowed for refinement. !> Default: 10 !> Aggressive: Set to 100 to permit convergence using approximate !> factorizations or factorizations other than LU. If !> the factorization uses a technique other than !> Gaussian elimination, the guarantees in !> err_bnds_norm and err_bnds_comp may no longer be !> trustworthy. !> !> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code !> will attempt to find a solution with small componentwise !> relative error in the double-precision algorithm. Positive !> is true, 0.0 is false. !> Default: 1.0 (attempt componentwise convergence) !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (2*N) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: Successful exit. The solution to every right-hand side is !> guaranteed. !> < 0: If INFO = -i, the i-th argument had an illegal value !> > 0 and <= N: U(INFO,INFO) is exactly zero. The factorization !> has been completed, but the factor U is exactly singular, so !> the solution and error bounds could not be computed. RCOND = 0 !> is returned. !> = N+J: The solution corresponding to the Jth right-hand side is !> not guaranteed. The solutions corresponding to other right- !> hand sides K with K > J may not be guaranteed as well, but !> only the first such right-hand side is reported. If a small !> componentwise error is not requested (PARAMS(3) = 0.0) then !> the Jth right-hand side is the first with a normwise error !> bound that is not guaranteed (the smallest J such !> that ERR_BNDS_NORM(J,1) = 0.0). By default (PARAMS(3) = 1.0) !> the Jth right-hand side is the first with either a normwise or !> componentwise error bound that is not guaranteed (the smallest !> J such that either ERR_BNDS_NORM(J,1) = 0.0 or !> ERR_BNDS_COMP(J,1) = 0.0). See the definition of !> ERR_BNDS_NORM(:,1) and ERR_BNDS_COMP(:,1). To get information !> about all of the right-hand sides check ERR_BNDS_NORM or !> ERR_BNDS_COMP. !> |
Definition at line 410 of file zgerfsx.f.
| subroutine zgerq2 | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | info ) |
ZGERQ2 computes the RQ factorization of a general rectangular matrix using an unblocked algorithm.
Download ZGERQ2 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGERQ2 computes an RQ factorization of a complex m by n matrix A: !> A = R * Q. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the m by n matrix A. !> On exit, if m <= n, the upper triangle of the subarray !> A(1:m,n-m+1:n) contains the m by m upper triangular matrix R; !> if m >= n, the elements on and above the (m-n)-th subdiagonal !> contain the m by n upper trapezoidal matrix R; the remaining !> elements, with the array TAU, represent the unitary matrix !> Q as a product of elementary reflectors (see Further !> Details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (M) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix Q is represented as a product of elementary reflectors !> !> Q = H(1)**H H(2)**H . . . H(k)**H, where k = min(m,n). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(n-k+i+1:n) = 0 and v(n-k+i) = 1; conjg(v(1:n-k+i-1)) is stored on !> exit in A(m-k+i,1:n-k+i-1), and tau in TAU(i). !>
Definition at line 122 of file zgerq2.f.
| subroutine zgerqf | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | tau, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
ZGERQF
Download ZGERQF + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGERQF computes an RQ factorization of a complex M-by-N matrix A: !> A = R * Q. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N matrix A. !> On exit, !> if m <= n, the upper triangle of the subarray !> A(1:m,n-m+1:n) contains the M-by-M upper triangular matrix R; !> if m >= n, the elements on and above the (m-n)-th subdiagonal !> contain the M-by-N upper trapezoidal matrix R; !> the remaining elements, with the array TAU, represent the !> unitary matrix Q as a product of min(m,n) elementary !> reflectors (see Further Details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | TAU | !> TAU is COMPLEX*16 array, dimension (min(M,N)) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. !> LWORK >= 1, if MIN(M,N) = 0, and LWORK >= M, otherwise. !> For optimum performance LWORK >= M*NB, where NB is !> the optimal blocksize. !> !> 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. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> The matrix Q is represented as a product of elementary reflectors !> !> Q = H(1)**H H(2)**H . . . H(k)**H, where k = min(m,n). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**H !> !> where tau is a complex scalar, and v is a complex vector with !> v(n-k+i+1:n) = 0 and v(n-k+i) = 1; conjg(v(1:n-k+i-1)) is stored on !> exit in A(m-k+i,1:n-k+i-1), and tau in TAU(i). !>
Definition at line 138 of file zgerqf.f.
| subroutine zgesvj | ( | character*1 | joba, |
| character*1 | jobu, | ||
| character*1 | jobv, | ||
| integer | m, | ||
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| double precision, dimension( n ) | sva, | ||
| integer | mv, | ||
| complex*16, dimension( ldv, * ) | v, | ||
| integer | ldv, | ||
| complex*16, dimension( lwork ) | cwork, | ||
| integer | lwork, | ||
| double precision, dimension( lrwork ) | rwork, | ||
| integer | lrwork, | ||
| integer | info ) |
ZGESVJ
Download ZGESVJ + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGESVJ computes the singular value decomposition (SVD) of a complex !> M-by-N matrix A, where M >= N. The SVD of A is written as !> [++] [xx] [x0] [xx] !> A = U * SIGMA * V^*, [++] = [xx] * [ox] * [xx] !> [++] [xx] !> where SIGMA is an N-by-N diagonal matrix, U is an M-by-N orthonormal !> matrix, and V is an N-by-N unitary matrix. The diagonal elements !> of SIGMA are the singular values of A. The columns of U and V are the !> left and the right singular vectors of A, respectively. !>
| [in] | JOBA | !> JOBA is CHARACTER*1 !> Specifies the structure of A. !> = 'L': The input matrix A is lower triangular; !> = 'U': The input matrix A is upper triangular; !> = 'G': The input matrix A is general M-by-N matrix, M >= N. !> |
| [in] | JOBU | !> JOBU is CHARACTER*1
!> Specifies whether to compute the left singular vectors
!> (columns of U):
!> = 'U' or 'F': The left singular vectors corresponding to the nonzero
!> singular values are computed and returned in the leading
!> columns of A. See more details in the description of A.
!> The default numerical orthogonality threshold is set to
!> approximately TOL=CTOL*EPS, CTOL=SQRT(M), EPS=DLAMCH('E').
!> = 'C': Analogous to JOBU='U', except that user can control the
!> level of numerical orthogonality of the computed left
!> singular vectors. TOL can be set to TOL = CTOL*EPS, where
!> CTOL is given on input in the array WORK.
!> No CTOL smaller than ONE is allowed. CTOL greater
!> than 1 / EPS is meaningless. The option 'C'
!> can be used if M*EPS is satisfactory orthogonality
!> of the computed left singular vectors, so CTOL=M could
!> save few sweeps of Jacobi rotations.
!> See the descriptions of A and WORK(1).
!> = 'N': The matrix U is not computed. However, see the
!> description of A.
!> |
| [in] | JOBV | !> JOBV is CHARACTER*1 !> Specifies whether to compute the right singular vectors, that !> is, the matrix V: !> = 'V' or 'J': the matrix V is computed and returned in the array V !> = 'A': the Jacobi rotations are applied to the MV-by-N !> array V. In other words, the right singular vector !> matrix V is not computed explicitly; instead it is !> applied to an MV-by-N matrix initially stored in the !> first MV rows of V. !> = 'N': the matrix V is not computed and the array V is not !> referenced !> |
| [in] | M | !> M is INTEGER
!> The number of rows of the input matrix A. 1/DLAMCH('E') > M >= 0.
!> |
| [in] | N | !> N is INTEGER !> The number of columns of the input matrix A. !> M >= N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N)
!> On entry, the M-by-N matrix A.
!> On exit,
!> If JOBU = 'U' .OR. JOBU = 'C':
!> If INFO = 0 :
!> RANKA orthonormal columns of U are returned in the
!> leading RANKA columns of the array A. Here RANKA <= N
!> is the number of computed singular values of A that are
!> above the underflow threshold DLAMCH('S'). The singular
!> vectors corresponding to underflowed or zero singular
!> values are not computed. The value of RANKA is returned
!> in the array RWORK as RANKA=NINT(RWORK(2)). Also see the
!> descriptions of SVA and RWORK. The computed columns of U
!> are mutually numerically orthogonal up to approximately
!> TOL=SQRT(M)*EPS (default); or TOL=CTOL*EPS (JOBU = 'C'),
!> see the description of JOBU.
!> If INFO > 0,
!> the procedure ZGESVJ did not converge in the given number
!> of iterations (sweeps). In that case, the computed
!> columns of U may not be orthogonal up to TOL. The output
!> U (stored in A), SIGMA (given by the computed singular
!> values in SVA(1:N)) and V is still a decomposition of the
!> input matrix A in the sense that the residual
!> || A - SCALE * U * SIGMA * V^* ||_2 / ||A||_2 is small.
!> If JOBU = 'N':
!> If INFO = 0 :
!> Note that the left singular vectors are 'for free' in the
!> one-sided Jacobi SVD algorithm. However, if only the
!> singular values are needed, the level of numerical
!> orthogonality of U is not an issue and iterations are
!> stopped when the columns of the iterated matrix are
!> numerically orthogonal up to approximately M*EPS. Thus,
!> on exit, A contains the columns of U scaled with the
!> corresponding singular values.
!> If INFO > 0:
!> the procedure ZGESVJ did not converge in the given number
!> of iterations (sweeps).
!> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | SVA | !> SVA is DOUBLE PRECISION array, dimension (N) !> On exit, !> If INFO = 0 : !> depending on the value SCALE = RWORK(1), we have: !> If SCALE = ONE: !> SVA(1:N) contains the computed singular values of A. !> During the computation SVA contains the Euclidean column !> norms of the iterated matrices in the array A. !> If SCALE .NE. ONE: !> The singular values of A are SCALE*SVA(1:N), and this !> factored representation is due to the fact that some of the !> singular values of A might underflow or overflow. !> !> If INFO > 0: !> the procedure ZGESVJ did not converge in the given number of !> iterations (sweeps) and SCALE*SVA(1:N) may not be accurate. !> |
| [in] | MV | !> MV is INTEGER !> If JOBV = 'A', then the product of Jacobi rotations in ZGESVJ !> is applied to the first MV rows of V. See the description of JOBV. !> |
| [in,out] | V | !> V is COMPLEX*16 array, dimension (LDV,N) !> If JOBV = 'V', then V contains on exit the N-by-N matrix of !> the right singular vectors; !> If JOBV = 'A', then V contains the product of the computed right !> singular vector matrix and the initial matrix in !> the array V. !> If JOBV = 'N', then V is not referenced. !> |
| [in] | LDV | !> LDV is INTEGER !> The leading dimension of the array V, LDV >= 1. !> If JOBV = 'V', then LDV >= max(1,N). !> If JOBV = 'A', then LDV >= max(1,MV) . !> |
| [in,out] | CWORK | !> CWORK is COMPLEX*16 array, dimension (max(1,LWORK)) !> Used as workspace. !> If on entry LWORK = -1, then a workspace query is assumed and !> no computation is done; CWORK(1) is set to the minial (and optimal) !> length of CWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER. !> Length of CWORK, LWORK >= M+N. !> |
| [in,out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (max(6,LRWORK))
!> On entry,
!> If JOBU = 'C' :
!> RWORK(1) = CTOL, where CTOL defines the threshold for convergence.
!> The process stops if all columns of A are mutually
!> orthogonal up to CTOL*EPS, EPS=DLAMCH('E').
!> It is required that CTOL >= ONE, i.e. it is not
!> allowed to force the routine to obtain orthogonality
!> below EPSILON.
!> On exit,
!> RWORK(1) = SCALE is the scaling factor such that SCALE*SVA(1:N)
!> are the computed singular values of A.
!> (See description of SVA().)
!> RWORK(2) = NINT(RWORK(2)) is the number of the computed nonzero
!> singular values.
!> RWORK(3) = NINT(RWORK(3)) is the number of the computed singular
!> values that are larger than the underflow threshold.
!> RWORK(4) = NINT(RWORK(4)) is the number of sweeps of Jacobi
!> rotations needed for numerical convergence.
!> RWORK(5) = max_{i.NE.j} |COS(A(:,i),A(:,j))| in the last sweep.
!> This is useful information in cases when ZGESVJ did
!> not converge, as it can be used to estimate whether
!> the output is still useful and for post festum analysis.
!> RWORK(6) = the largest absolute value over all sines of the
!> Jacobi rotation angles in the last sweep. It can be
!> useful for a post festum analysis.
!> If on entry LRWORK = -1, then a workspace query is assumed and
!> no computation is done; RWORK(1) is set to the minial (and optimal)
!> length of RWORK.
!> |
| [in] | LRWORK | !> LRWORK is INTEGER !> Length of RWORK, LRWORK >= MAX(6,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, then the i-th argument had an illegal value !> > 0: ZGESVJ did not converge in the maximal allowed number !> (NSWEEP=30) of sweeps. The output may still be useful. !> See the description of RWORK. !> |
!>
!> The orthogonal N-by-N matrix V is obtained as a product of Jacobi plane
!> rotations. In the case of underflow of the tangent of the Jacobi angle, a
!> modified Jacobi transformation of Drmac [3] is used. Pivot strategy uses
!> column interchanges of de Rijk [1]. The relative accuracy of the computed
!> singular values and the accuracy of the computed singular vectors (in
!> angle metric) is as guaranteed by the theory of Demmel and Veselic [2].
!> The condition number that determines the accuracy in the full rank case
!> is essentially min_{D=diag} kappa(A*D), where kappa(.) is the
!> spectral condition number. The best performance of this Jacobi SVD
!> procedure is achieved if used in an accelerated version of Drmac and
!> Veselic [4,5], and it is the kernel routine in the SIGMA library [6].
!> Some tuning parameters (marked with [TP]) are available for the
!> implementer.
!> The computational range for the nonzero singular values is the machine
!> number interval ( UNDERFLOW , OVERFLOW ). In extreme cases, even
!> denormalized singular values can be computed with the corresponding
!> gradual loss of accurate digits.
!> !> !> ============ !> !> Zlatko Drmac (Zagreb, Croatia) !> !>
!> !> [1] P. P. M. De Rijk: A one-sided Jacobi algorithm for computing the !> singular value decomposition on a vector computer. !> SIAM J. Sci. Stat. Comp., Vol. 10 (1998), pp. 359-371. !> [2] J. Demmel and K. Veselic: Jacobi method is more accurate than QR. !> [3] Z. Drmac: Implementation of Jacobi rotations for accurate singular !> value computation in floating point arithmetic. !> SIAM J. Sci. Comp., Vol. 18 (1997), pp. 1200-1222. !> [4] Z. Drmac and K. Veselic: New fast and accurate Jacobi SVD algorithm I. !> SIAM J. Matrix Anal. Appl. Vol. 35, No. 2 (2008), pp. 1322-1342. !> LAPACK Working note 169. !> [5] Z. Drmac and K. Veselic: New fast and accurate Jacobi SVD algorithm II. !> SIAM J. Matrix Anal. Appl. Vol. 35, No. 2 (2008), pp. 1343-1362. !> LAPACK Working note 170. !> [6] Z. Drmac: SIGMA - mathematical software library for accurate SVD, PSV, !> QSVD, (H,K)-SVD computations. !> Department of Mathematics, University of Zagreb, 2008, 2015. !>
!> =========================== !> Please report all bugs and send interesting test examples and comments to !> drmac@math.hr. Thank you. !>
Definition at line 349 of file zgesvj.f.
| subroutine zgetf2 | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| integer | info ) |
ZGETF2 computes the LU factorization of a general m-by-n matrix using partial pivoting with row interchanges (unblocked algorithm).
Download ZGETF2 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGETF2 computes an LU factorization of a general m-by-n matrix A !> using partial pivoting with row interchanges. !> !> The factorization has the form !> A = P * L * U !> where P is a permutation matrix, L is lower triangular with unit !> diagonal elements (lower trapezoidal if m > n), and U is upper !> triangular (upper trapezoidal if m < n). !> !> This is the right-looking Level 2 BLAS version of the algorithm. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the m by n matrix to be factored. !> On exit, the factors L and U from the factorization !> A = P*L*U; the unit diagonal elements of L are not stored. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (min(M,N)) !> The pivot indices; for 1 <= i <= min(M,N), row i of the !> matrix was interchanged with row IPIV(i). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -k, the k-th argument had an illegal value !> > 0: if INFO = k, U(k,k) is exactly zero. The factorization !> has been completed, but the factor U is exactly !> singular, and division by zero will occur if it is used !> to solve a system of equations. !> |
Definition at line 107 of file zgetf2.f.
| subroutine zgetrf | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| integer | info ) |
ZGETRF
Download ZGETRF + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGETRF computes an LU factorization of a general M-by-N matrix A !> using partial pivoting with row interchanges. !> !> The factorization has the form !> A = P * L * U !> where P is a permutation matrix, L is lower triangular with unit !> diagonal elements (lower trapezoidal if m > n), and U is upper !> triangular (upper trapezoidal if m < n). !> !> This is the right-looking Level 3 BLAS version of the algorithm. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N matrix to be factored. !> On exit, the factors L and U from the factorization !> A = P*L*U; the unit diagonal elements of L are not stored. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (min(M,N)) !> The pivot indices; for 1 <= i <= min(M,N), row i of the !> matrix was interchanged with row IPIV(i). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, U(i,i) is exactly zero. The factorization !> has been completed, but the factor U is exactly !> singular, and division by zero will occur if it is used !> to solve a system of equations. !> |
Definition at line 107 of file zgetrf.f.
| recursive subroutine zgetrf2 | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| integer | info ) |
ZGETRF2
!> !> ZGETRF2 computes an LU factorization of a general M-by-N matrix A !> using partial pivoting with row interchanges. !> !> The factorization has the form !> A = P * L * U !> where P is a permutation matrix, L is lower triangular with unit !> diagonal elements (lower trapezoidal if m > n), and U is upper !> triangular (upper trapezoidal if m < n). !> !> This is the recursive version of the algorithm. It divides !> the matrix into four submatrices: !> !> [ A11 | A12 ] where A11 is n1 by n1 and A22 is n2 by n2 !> A = [ -----|----- ] with n1 = min(m,n)/2 !> [ A21 | A22 ] n2 = n-n1 !> !> [ A11 ] !> The subroutine calls itself to factor [ --- ], !> [ A12 ] !> [ A12 ] !> do the swaps on [ --- ], solve A12, update A22, !> [ A22 ] !> !> then calls itself to factor A22 and do the swaps on A21. !> !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N matrix to be factored. !> On exit, the factors L and U from the factorization !> A = P*L*U; the unit diagonal elements of L are not stored. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (min(M,N)) !> The pivot indices; for 1 <= i <= min(M,N), row i of the !> matrix was interchanged with row IPIV(i). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, U(i,i) is exactly zero. The factorization !> has been completed, but the factor U is exactly !> singular, and division by zero will occur if it is used !> to solve a system of equations. !> |
Definition at line 112 of file zgetrf2.f.
| subroutine zgetri | ( | integer | n, |
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
ZGETRI
Download ZGETRI + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGETRI computes the inverse of a matrix using the LU factorization !> computed by ZGETRF. !> !> This method inverts U and then computes inv(A) by solving the system !> inv(A)*L = inv(U) for inv(A). !>
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the factors L and U from the factorization !> A = P*L*U as computed by ZGETRF. !> On exit, if INFO = 0, the inverse of the original matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> The pivot indices from ZGETRF; for 1<=i<=N, row i of the !> matrix was interchanged with row IPIV(i). !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO=0, then WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= max(1,N). !> For optimal performance LWORK >= N*NB, where NB is !> the optimal blocksize returned by ILAENV. !> !> 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. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, U(i,i) is exactly zero; the matrix is !> singular and its inverse could not be computed. !> |
Definition at line 113 of file zgetri.f.
| subroutine zgetrs | ( | character | trans, |
| integer | n, | ||
| integer | nrhs, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex*16, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | info ) |
ZGETRS
Download ZGETRS + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGETRS solves a system of linear equations !> A * X = B, A**T * X = B, or A**H * X = B !> with a general N-by-N matrix A using the LU factorization computed !> by ZGETRF. !>
| [in] | TRANS | !> TRANS is CHARACTER*1 !> Specifies the form of the system of equations: !> = 'N': A * X = B (No transpose) !> = 'T': A**T * X = B (Transpose) !> = 'C': A**H * X = B (Conjugate transpose) !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> The factors L and U from the factorization A = P*L*U !> as computed by ZGETRF. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> The pivot indices from ZGETRF; for 1<=i<=N, row i of the !> matrix was interchanged with row IPIV(i). !> |
| [in,out] | B | !> B is COMPLEX*16 array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 120 of file zgetrs.f.
| subroutine zhgeqz | ( | character | job, |
| character | compq, | ||
| character | compz, | ||
| integer | n, | ||
| integer | ilo, | ||
| integer | ihi, | ||
| complex*16, dimension( ldh, * ) | h, | ||
| integer | ldh, | ||
| complex*16, dimension( ldt, * ) | t, | ||
| integer | ldt, | ||
| complex*16, dimension( * ) | alpha, | ||
| complex*16, dimension( * ) | beta, | ||
| complex*16, dimension( ldq, * ) | q, | ||
| integer | ldq, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | info ) |
ZHGEQZ
Download ZHGEQZ + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHGEQZ computes the eigenvalues of a complex matrix pair (H,T), !> where H is an upper Hessenberg matrix and T is upper triangular, !> using the single-shift QZ method. !> Matrix pairs of this type are produced by the reduction to !> generalized upper Hessenberg form of a complex matrix pair (A,B): !> !> A = Q1*H*Z1**H, B = Q1*T*Z1**H, !> !> as computed by ZGGHRD. !> !> If JOB='S', then the Hessenberg-triangular pair (H,T) is !> also reduced to generalized Schur form, !> !> H = Q*S*Z**H, T = Q*P*Z**H, !> !> where Q and Z are unitary matrices and S and P are upper triangular. !> !> Optionally, the unitary matrix Q from the generalized Schur !> factorization may be postmultiplied into an input matrix Q1, and the !> unitary matrix Z may be postmultiplied into an input matrix Z1. !> If Q1 and Z1 are the unitary matrices from ZGGHRD that reduced !> the matrix pair (A,B) to generalized Hessenberg form, then the output !> matrices Q1*Q and Z1*Z are the unitary factors from the generalized !> Schur factorization of (A,B): !> !> A = (Q1*Q)*S*(Z1*Z)**H, B = (Q1*Q)*P*(Z1*Z)**H. !> !> To avoid overflow, eigenvalues of the matrix pair (H,T) !> (equivalently, of (A,B)) are computed as a pair of complex values !> (alpha,beta). If beta is nonzero, lambda = alpha / beta is an !> eigenvalue of the generalized nonsymmetric eigenvalue problem (GNEP) !> A*x = lambda*B*x !> and if alpha is nonzero, mu = beta / alpha is an eigenvalue of the !> alternate form of the GNEP !> mu*A*y = B*y. !> The values of alpha and beta for the i-th eigenvalue can be read !> directly from the generalized Schur form: alpha = S(i,i), !> beta = P(i,i). !> !> Ref: C.B. Moler & G.W. Stewart, , SIAM J. Numer. Anal., 10(1973), !> pp. 241--256. !>
| [in] | JOB | !> JOB is CHARACTER*1 !> = 'E': Compute eigenvalues only; !> = 'S': Computer eigenvalues and the Schur form. !> |
| [in] | COMPQ | !> COMPQ is CHARACTER*1 !> = 'N': Left Schur vectors (Q) are not computed; !> = 'I': Q is initialized to the unit matrix and the matrix Q !> of left Schur vectors of (H,T) is returned; !> = 'V': Q must contain a unitary matrix Q1 on entry and !> the product Q1*Q is returned. !> |
| [in] | COMPZ | !> COMPZ is CHARACTER*1 !> = 'N': Right Schur vectors (Z) are not computed; !> = 'I': Q is initialized to the unit matrix and the matrix Z !> of right Schur vectors of (H,T) is returned; !> = 'V': Z must contain a unitary matrix Z1 on entry and !> the product Z1*Z is returned. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices H, T, Q, and Z. N >= 0. !> |
| [in] | ILO | !> ILO is INTEGER !> |
| [in] | IHI | !> IHI is INTEGER !> ILO and IHI mark the rows and columns of H which are in !> Hessenberg form. It is assumed that A is already upper !> triangular in rows and columns 1:ILO-1 and IHI+1:N. !> If N > 0, 1 <= ILO <= IHI <= N; if N = 0, ILO=1 and IHI=0. !> |
| [in,out] | H | !> H is COMPLEX*16 array, dimension (LDH, N) !> On entry, the N-by-N upper Hessenberg matrix H. !> On exit, if JOB = 'S', H contains the upper triangular !> matrix S from the generalized Schur factorization. !> If JOB = 'E', the diagonal of H matches that of S, but !> the rest of H is unspecified. !> |
| [in] | LDH | !> LDH is INTEGER !> The leading dimension of the array H. LDH >= max( 1, N ). !> |
| [in,out] | T | !> T is COMPLEX*16 array, dimension (LDT, N) !> On entry, the N-by-N upper triangular matrix T. !> On exit, if JOB = 'S', T contains the upper triangular !> matrix P from the generalized Schur factorization. !> If JOB = 'E', the diagonal of T matches that of P, but !> the rest of T is unspecified. !> |
| [in] | LDT | !> LDT is INTEGER !> The leading dimension of the array T. LDT >= max( 1, N ). !> |
| [out] | ALPHA | !> ALPHA is COMPLEX*16 array, dimension (N) !> The complex scalars alpha that define the eigenvalues of !> GNEP. ALPHA(i) = S(i,i) in the generalized Schur !> factorization. !> |
| [out] | BETA | !> BETA is COMPLEX*16 array, dimension (N) !> The real non-negative scalars beta that define the !> eigenvalues of GNEP. BETA(i) = P(i,i) in the generalized !> Schur factorization. !> !> Together, the quantities alpha = ALPHA(j) and beta = BETA(j) !> represent the j-th eigenvalue of the matrix pair (A,B), in !> one of the forms lambda = alpha/beta or mu = beta/alpha. !> Since either lambda or mu may overflow, they should not, !> in general, be computed. !> |
| [in,out] | Q | !> Q is COMPLEX*16 array, dimension (LDQ, N) !> On entry, if COMPQ = 'V', the unitary matrix Q1 used in the !> reduction of (A,B) to generalized Hessenberg form. !> On exit, if COMPQ = 'I', the unitary matrix of left Schur !> vectors of (H,T), and if COMPQ = 'V', the unitary matrix of !> left Schur vectors of (A,B). !> Not referenced if COMPQ = 'N'. !> |
| [in] | LDQ | !> LDQ is INTEGER !> The leading dimension of the array Q. LDQ >= 1. !> If COMPQ='V' or 'I', then LDQ >= N. !> |
| [in,out] | Z | !> Z is COMPLEX*16 array, dimension (LDZ, N) !> On entry, if COMPZ = 'V', the unitary matrix Z1 used in the !> reduction of (A,B) to generalized Hessenberg form. !> On exit, if COMPZ = 'I', the unitary matrix of right Schur !> vectors of (H,T), and if COMPZ = 'V', the unitary matrix of !> right Schur vectors of (A,B). !> Not referenced if COMPZ = 'N'. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1. !> If COMPZ='V' or 'I', then LDZ >= N. !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO >= 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= max(1,N). !> !> 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. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> = 1,...,N: the QZ iteration did not converge. (H,T) is not !> in Schur form, but ALPHA(i) and BETA(i), !> i=INFO+1,...,N should be correct. !> = N+1,...,2*N: the shift calculation failed. (H,T) is not !> in Schur form, but ALPHA(i) and BETA(i), !> i=INFO-N+1,...,N should be correct. !> |
!> !> We assume that complex ABS works as long as its value is less than !> overflow. !>
Definition at line 281 of file zhgeqz.f.
| subroutine zla_geamv | ( | integer | trans, |
| integer | m, | ||
| integer | n, | ||
| double precision | alpha, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | x, | ||
| integer | incx, | ||
| double precision | beta, | ||
| double precision, dimension( * ) | y, | ||
| integer | incy ) |
ZLA_GEAMV computes a matrix-vector product using a general matrix to calculate error bounds.
Download ZLA_GEAMV + dependencies [TGZ] [ZIP] [TXT]
!> !> ZLA_GEAMV performs one of the matrix-vector operations !> !> y := alpha*abs(A)*abs(x) + beta*abs(y), !> or y := alpha*abs(A)**T*abs(x) + beta*abs(y), !> !> where alpha and beta are scalars, x and y are vectors and A is an !> m by n matrix. !> !> This function is primarily used in calculating error bounds. !> To protect against underflow during evaluation, components in !> the resulting vector are perturbed away from zero by (N+1) !> times the underflow threshold. To prevent unnecessarily large !> errors for block-structure embedded in general matrices, !> zero components are not perturbed. A zero !> entry is considered if all multiplications involved !> in computing that entry have at least one zero multiplicand. !>
| [in] | TRANS | !> TRANS is INTEGER !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> BLAS_NO_TRANS y := alpha*abs(A)*abs(x) + beta*abs(y) !> BLAS_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y) !> BLAS_CONJ_TRANS y := alpha*abs(A**T)*abs(x) + beta*abs(y) !> !> Unchanged on exit. !> |
| [in] | M | !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> Unchanged on exit. !> |
| [in] | N | !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> Unchanged on exit. !> |
| [in] | ALPHA | !> ALPHA is DOUBLE PRECISION !> On entry, ALPHA specifies the scalar alpha. !> Unchanged on exit. !> |
| [in] | A | !> A is COMPLEX*16 array, dimension ( LDA, n ) !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. !> Unchanged on exit. !> |
| [in] | LDA | !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, m ). !> Unchanged on exit. !> |
| [in] | X | !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. !> Before entry, the incremented array X must contain the !> vector x. !> Unchanged on exit. !> |
| [in] | INCX | !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> Unchanged on exit. !> |
| [in] | BETA | !> BETA is DOUBLE PRECISION !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> Unchanged on exit. !> |
| [in,out] | Y | !> Y is DOUBLE PRECISION array, dimension !> ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. !> Before entry with BETA non-zero, the incremented array Y !> must contain the vector y. On exit, Y is overwritten by the !> updated vector y. !> |
| [in] | INCY | !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> Unchanged on exit. !> !> Level 2 Blas routine. !> |
Definition at line 173 of file zla_geamv.f.
| double precision function zla_gercond_c | ( | character | trans, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| double precision, dimension( * ) | c, | ||
| logical | capply, | ||
| integer | info, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork ) |
ZLA_GERCOND_C computes the infinity norm condition number of op(A)*inv(diag(c)) for general matrices.
Download ZLA_GERCOND_C + dependencies [TGZ] [ZIP] [TXT]
!> !> ZLA_GERCOND_C computes the infinity norm condition number of !> op(A) * inv(diag(C)) where C is a DOUBLE PRECISION vector. !>
| [in] | TRANS | !> TRANS is CHARACTER*1 !> Specifies the form of the system of equations: !> = 'N': A * X = B (No transpose) !> = 'T': A**T * X = B (Transpose) !> = 'C': A**H * X = B (Conjugate Transpose = Transpose) !> |
| [in] | N | !> N is INTEGER !> The number of linear equations, i.e., the order of the !> matrix A. N >= 0. !> |
| [in] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the N-by-N matrix A !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is COMPLEX*16 array, dimension (LDAF,N) !> The factors L and U from the factorization !> A = P*L*U as computed by ZGETRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> The pivot indices from the factorization A = P*L*U !> as computed by ZGETRF; row i of the matrix was interchanged !> with row IPIV(i). !> |
| [in] | C | !> C is DOUBLE PRECISION array, dimension (N) !> The vector C in the formula op(A) * inv(diag(C)). !> |
| [in] | CAPPLY | !> CAPPLY is LOGICAL !> If .TRUE. then access the vector C in the formula above. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: Successful exit. !> i > 0: The ith argument is invalid. !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (2*N). !> Workspace. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (N). !> Workspace. !> |
Definition at line 140 of file zla_gercond_c.f.
| double precision function zla_gercond_x | ( | character | trans, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| complex*16, dimension( * ) | x, | ||
| integer | info, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork ) |
ZLA_GERCOND_X computes the infinity norm condition number of op(A)*diag(x) for general matrices.
Download ZLA_GERCOND_X + dependencies [TGZ] [ZIP] [TXT]
!> !> ZLA_GERCOND_X computes the infinity norm condition number of !> op(A) * diag(X) where X is a COMPLEX*16 vector. !>
| [in] | TRANS | !> TRANS is CHARACTER*1 !> Specifies the form of the system of equations: !> = 'N': A * X = B (No transpose) !> = 'T': A**T * X = B (Transpose) !> = 'C': A**H * X = B (Conjugate Transpose = Transpose) !> |
| [in] | N | !> N is INTEGER !> The number of linear equations, i.e., the order of the !> matrix A. N >= 0. !> |
| [in] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is COMPLEX*16 array, dimension (LDAF,N) !> The factors L and U from the factorization !> A = P*L*U as computed by ZGETRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> The pivot indices from the factorization A = P*L*U !> as computed by ZGETRF; row i of the matrix was interchanged !> with row IPIV(i). !> |
| [in] | X | !> X is COMPLEX*16 array, dimension (N) !> The vector X in the formula op(A) * diag(X). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: Successful exit. !> i > 0: The ith argument is invalid. !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (2*N). !> Workspace. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (N). !> Workspace. !> |
Definition at line 133 of file zla_gercond_x.f.
| subroutine zla_gerfsx_extended | ( | integer | prec_type, |
| integer | trans_type, | ||
| integer | n, | ||
| integer | nrhs, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| logical | colequ, | ||
| double precision, dimension( * ) | c, | ||
| complex*16, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex*16, dimension( ldy, * ) | y, | ||
| integer | ldy, | ||
| double precision, dimension( * ) | berr_out, | ||
| integer | n_norms, | ||
| double precision, dimension( nrhs, * ) | errs_n, | ||
| double precision, dimension( nrhs, * ) | errs_c, | ||
| complex*16, dimension( * ) | res, | ||
| double precision, dimension( * ) | ayb, | ||
| complex*16, dimension( * ) | dy, | ||
| complex*16, dimension( * ) | y_tail, | ||
| double precision | rcond, | ||
| integer | ithresh, | ||
| double precision | rthresh, | ||
| double precision | dz_ub, | ||
| logical | ignore_cwise, | ||
| integer | info ) |
ZLA_GERFSX_EXTENDED
Download ZLA_GERFSX_EXTENDED + dependencies [TGZ] [ZIP] [TXT]
!> !> ZLA_GERFSX_EXTENDED improves the computed solution to a system of !> linear equations by performing extra-precise iterative refinement !> and provides error bounds and backward error estimates for the solution. !> This subroutine is called by ZGERFSX to perform iterative refinement. !> In addition to normwise error bound, the code provides maximum !> componentwise error bound if possible. See comments for ERRS_N !> and ERRS_C for details of the error bounds. Note that this !> subroutine is only responsible for setting the second fields of !> ERRS_N and ERRS_C. !>
| [in] | PREC_TYPE | !> PREC_TYPE is INTEGER !> Specifies the intermediate precision to be used in refinement. !> The value is defined by ILAPREC(P) where P is a CHARACTER and P !> = 'S': Single !> = 'D': Double !> = 'I': Indigenous !> = 'X' or 'E': Extra !> |
| [in] | TRANS_TYPE | !> TRANS_TYPE is INTEGER !> Specifies the transposition operation on A. !> The value is defined by ILATRANS(T) where T is a CHARACTER and T !> = 'N': No transpose !> = 'T': Transpose !> = 'C': Conjugate transpose !> |
| [in] | N | !> N is INTEGER !> The number of linear equations, i.e., the order of the !> matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right-hand-sides, i.e., the number of columns of the !> matrix B. !> |
| [in] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is COMPLEX*16 array, dimension (LDAF,N) !> The factors L and U from the factorization !> A = P*L*U as computed by ZGETRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> The pivot indices from the factorization A = P*L*U !> as computed by ZGETRF; row i of the matrix was interchanged !> with row IPIV(i). !> |
| [in] | COLEQU | !> COLEQU is LOGICAL !> If .TRUE. then column equilibration was done to A before calling !> this routine. This is needed to compute the solution and error !> bounds correctly. !> |
| [in] | C | !> C is DOUBLE PRECISION array, dimension (N) !> The column scale factors for A. If COLEQU = .FALSE., C !> is not accessed. If C is input, each element of C should be a power !> of the radix to ensure a reliable solution and error estimates. !> Scaling by powers of the radix does not cause rounding errors unless !> the result underflows or overflows. Rounding errors during scaling !> lead to refining with a matrix that is not equivalent to the !> input matrix, producing error estimates that may not be !> reliable. !> |
| [in] | B | !> B is COMPLEX*16 array, dimension (LDB,NRHS) !> The right-hand-side matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | Y | !> Y is COMPLEX*16 array, dimension (LDY,NRHS) !> On entry, the solution matrix X, as computed by ZGETRS. !> On exit, the improved solution matrix Y. !> |
| [in] | LDY | !> LDY is INTEGER !> The leading dimension of the array Y. LDY >= max(1,N). !> |
| [out] | BERR_OUT | !> BERR_OUT is DOUBLE PRECISION array, dimension (NRHS) !> On exit, BERR_OUT(j) contains the componentwise relative backward !> error for right-hand-side j from the formula !> max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) ) !> where abs(Z) is the componentwise absolute value of the matrix !> or vector Z. This is computed by ZLA_LIN_BERR. !> |
| [in] | N_NORMS | !> N_NORMS is INTEGER !> Determines which error bounds to return (see ERRS_N !> and ERRS_C). !> If N_NORMS >= 1 return normwise error bounds. !> If N_NORMS >= 2 return componentwise error bounds. !> |
| [in,out] | ERRS_N | !> ERRS_N is DOUBLE PRECISION array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand side, this array contains information about
!> various error bounds and condition numbers corresponding to the
!> normwise relative error, which is defined as follows:
!>
!> Normwise relative error in the ith solution vector:
!> max_j (abs(XTRUE(j,i) - X(j,i)))
!> ------------------------------
!> max_j abs(X(j,i))
!>
!> The array is indexed by the type of error information as described
!> below. There currently are up to three pieces of information
!> returned.
!>
!> The first index in ERRS_N(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERRS_N(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * slamch('Epsilon').
!>
!> err = 2 error bound: The estimated forward error,
!> almost certainly within a factor of 10 of the true error
!> so long as the next entry is greater than the threshold
!> sqrt(n) * slamch('Epsilon'). This error bound should only
!> be trusted if the previous boolean is true.
!>
!> err = 3 Reciprocal condition number: Estimated normwise
!> reciprocal condition number. Compared with the threshold
!> sqrt(n) * slamch('Epsilon') to determine if the error
!> estimate is . These reciprocal condition
!> numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for some
!> appropriately scaled matrix Z.
!> Let Z = S*A, where S scales each row by a power of the
!> radix so all absolute row sums of Z are approximately 1.
!>
!> This subroutine is only responsible for setting the second field
!> above.
!> See Lapack Working Note 165 for further details and extra
!> cautions.
!> |
| [in,out] | ERRS_C | !> ERRS_C is DOUBLE PRECISION array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand side, this array contains information about
!> various error bounds and condition numbers corresponding to the
!> componentwise relative error, which is defined as follows:
!>
!> Componentwise relative error in the ith solution vector:
!> abs(XTRUE(j,i) - X(j,i))
!> max_j ----------------------
!> abs(X(j,i))
!>
!> The array is indexed by the right-hand side i (on which the
!> componentwise relative error depends), and the type of error
!> information as described below. There currently are up to three
!> pieces of information returned for each right-hand side. If
!> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
!> ERRS_C is not accessed. If N_ERR_BNDS < 3, then at most
!> the first (:,N_ERR_BNDS) entries are returned.
!>
!> The first index in ERRS_C(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERRS_C(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * slamch('Epsilon').
!>
!> err = 2 error bound: The estimated forward error,
!> almost certainly within a factor of 10 of the true error
!> so long as the next entry is greater than the threshold
!> sqrt(n) * slamch('Epsilon'). This error bound should only
!> be trusted if the previous boolean is true.
!>
!> err = 3 Reciprocal condition number: Estimated componentwise
!> reciprocal condition number. Compared with the threshold
!> sqrt(n) * slamch('Epsilon') to determine if the error
!> estimate is . These reciprocal condition
!> numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for some
!> appropriately scaled matrix Z.
!> Let Z = S*(A*diag(x)), where x is the solution for the
!> current right-hand side and S scales each row of
!> A*diag(x) by a power of the radix so all absolute row
!> sums of Z are approximately 1.
!>
!> This subroutine is only responsible for setting the second field
!> above.
!> See Lapack Working Note 165 for further details and extra
!> cautions.
!> |
| [in] | RES | !> RES is COMPLEX*16 array, dimension (N) !> Workspace to hold the intermediate residual. !> |
| [in] | AYB | !> AYB is DOUBLE PRECISION array, dimension (N) !> Workspace. !> |
| [in] | DY | !> DY is COMPLEX*16 array, dimension (N) !> Workspace to hold the intermediate solution. !> |
| [in] | Y_TAIL | !> Y_TAIL is COMPLEX*16 array, dimension (N) !> Workspace to hold the trailing bits of the intermediate solution. !> |
| [in] | RCOND | !> RCOND is DOUBLE PRECISION !> Reciprocal scaled condition number. This is an estimate of the !> reciprocal Skeel condition number of the matrix A after !> equilibration (if done). If this is less than the machine !> precision (in particular, if it is zero), the matrix is singular !> to working precision. Note that the error may still be small even !> if this number is very small and the matrix appears ill- !> conditioned. !> |
| [in] | ITHRESH | !> ITHRESH is INTEGER !> The maximum number of residual computations allowed for !> refinement. The default is 10. For 'aggressive' set to 100 to !> permit convergence using approximate factorizations or !> factorizations other than LU. If the factorization uses a !> technique other than Gaussian elimination, the guarantees in !> ERRS_N and ERRS_C may no longer be trustworthy. !> |
| [in] | RTHRESH | !> RTHRESH is DOUBLE PRECISION
!> Determines when to stop refinement if the error estimate stops
!> decreasing. Refinement will stop when the next solution no longer
!> satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
!> the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
!> default value is 0.5. For 'aggressive' set to 0.9 to permit
!> convergence on extremely ill-conditioned matrices. See LAWN 165
!> for more details.
!> |
| [in] | DZ_UB | !> DZ_UB is DOUBLE PRECISION !> Determines when to start considering componentwise convergence. !> Componentwise convergence is only considered after each component !> of the solution Y is stable, which we define as the relative !> change in each component being less than DZ_UB. The default value !> is 0.25, requiring the first bit to be stable. See LAWN 165 for !> more details. !> |
| [in] | IGNORE_CWISE | !> IGNORE_CWISE is LOGICAL !> If .TRUE. then ignore componentwise convergence. Default value !> is .FALSE.. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: Successful exit. !> < 0: if INFO = -i, the ith argument to ZGETRS had an illegal !> value !> |
Definition at line 390 of file zla_gerfsx_extended.f.
| double precision function zla_gerpvgrw | ( | integer | n, |
| integer | ncols, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( ldaf, * ) | af, | ||
| integer | ldaf ) |
ZLA_GERPVGRW multiplies a square real matrix by a complex matrix.
Download ZLA_GERPVGRW + dependencies [TGZ] [ZIP] [TXT]
!> !> !> ZLA_GERPVGRW computes the reciprocal pivot growth factor !> norm(A)/norm(U). The norm is used. If this is !> much less than 1, the stability of the LU factorization of the !> (equilibrated) matrix A could be poor. This also means that the !> solution X, estimated condition numbers, and error bounds could be !> unreliable. !>
| [in] | N | !> N is INTEGER !> The number of linear equations, i.e., the order of the !> matrix A. N >= 0. !> |
| [in] | NCOLS | !> NCOLS is INTEGER !> The number of columns of the matrix A. NCOLS >= 0. !> |
| [in] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is COMPLEX*16 array, dimension (LDAF,N) !> The factors L and U from the factorization !> A = P*L*U as computed by ZGETRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
Definition at line 98 of file zla_gerpvgrw.f.
| recursive subroutine zlaqz0 | ( | character, intent(in) | wants, |
| character, intent(in) | wantq, | ||
| character, intent(in) | wantz, | ||
| integer, intent(in) | n, | ||
| integer, intent(in) | ilo, | ||
| integer, intent(in) | ihi, | ||
| complex*16, dimension( lda, * ), intent(inout) | a, | ||
| integer, intent(in) | lda, | ||
| complex*16, dimension( ldb, * ), intent(inout) | b, | ||
| integer, intent(in) | ldb, | ||
| complex*16, dimension( * ), intent(inout) | alpha, | ||
| complex*16, dimension( * ), intent(inout) | beta, | ||
| complex*16, dimension( ldq, * ), intent(inout) | q, | ||
| integer, intent(in) | ldq, | ||
| complex*16, dimension( ldz, * ), intent(inout) | z, | ||
| integer, intent(in) | ldz, | ||
| complex*16, dimension( * ), intent(inout) | work, | ||
| integer, intent(in) | lwork, | ||
| double precision, dimension( * ), intent(out) | rwork, | ||
| integer, intent(in) | rec, | ||
| integer, intent(out) | info ) |
ZLAQZ0
Download ZLAQZ0 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZLAQZ0 computes the eigenvalues of a real matrix pair (H,T), !> where H is an upper Hessenberg matrix and T is upper triangular, !> using the double-shift QZ method. !> Matrix pairs of this type are produced by the reduction to !> generalized upper Hessenberg form of a real matrix pair (A,B): !> !> A = Q1*H*Z1**H, B = Q1*T*Z1**H, !> !> as computed by ZGGHRD. !> !> If JOB='S', then the Hessenberg-triangular pair (H,T) is !> also reduced to generalized Schur form, !> !> H = Q*S*Z**H, T = Q*P*Z**H, !> !> where Q and Z are unitary matrices, P and S are an upper triangular !> matrices. !> !> Optionally, the unitary matrix Q from the generalized Schur !> factorization may be postmultiplied into an input matrix Q1, and the !> unitary matrix Z may be postmultiplied into an input matrix Z1. !> If Q1 and Z1 are the unitary matrices from ZGGHRD that reduced !> the matrix pair (A,B) to generalized upper Hessenberg form, then the !> output matrices Q1*Q and Z1*Z are the unitary factors from the !> generalized Schur factorization of (A,B): !> !> A = (Q1*Q)*S*(Z1*Z)**H, B = (Q1*Q)*P*(Z1*Z)**H. !> !> To avoid overflow, eigenvalues of the matrix pair (H,T) (equivalently, !> of (A,B)) are computed as a pair of values (alpha,beta), where alpha is !> complex and beta real. !> If beta is nonzero, lambda = alpha / beta is an eigenvalue of the !> generalized nonsymmetric eigenvalue problem (GNEP) !> A*x = lambda*B*x !> and if alpha is nonzero, mu = beta / alpha is an eigenvalue of the !> alternate form of the GNEP !> mu*A*y = B*y. !> Eigenvalues can be read directly from the generalized Schur !> form: !> alpha = S(i,i), beta = P(i,i). !> !> Ref: C.B. Moler & G.W. Stewart, , SIAM J. Numer. Anal., 10(1973), !> pp. 241--256. !> !> Ref: B. Kagstrom, D. Kressner, , SIAM J. Numer. !> Anal., 29(2006), pp. 199--227. !> !> Ref: T. Steel, D. Camps, K. Meerbergen, R. Vandebril !>
| [in] | WANTS | !> WANTS is CHARACTER*1 !> = 'E': Compute eigenvalues only; !> = 'S': Compute eigenvalues and the Schur form. !> |
| [in] | WANTQ | !> WANTQ is CHARACTER*1 !> = 'N': Left Schur vectors (Q) are not computed; !> = 'I': Q is initialized to the unit matrix and the matrix Q !> of left Schur vectors of (A,B) is returned; !> = 'V': Q must contain an unitary matrix Q1 on entry and !> the product Q1*Q is returned. !> |
| [in] | WANTZ | !> WANTZ is CHARACTER*1 !> = 'N': Right Schur vectors (Z) are not computed; !> = 'I': Z is initialized to the unit matrix and the matrix Z !> of right Schur vectors of (A,B) is returned; !> = 'V': Z must contain an unitary matrix Z1 on entry and !> the product Z1*Z is returned. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, Q, and Z. N >= 0. !> |
| [in] | ILO | !> ILO is INTEGER !> |
| [in] | IHI | !> IHI is INTEGER !> ILO and IHI mark the rows and columns of A which are in !> Hessenberg form. It is assumed that A is already upper !> triangular in rows and columns 1:ILO-1 and IHI+1:N. !> If N > 0, 1 <= ILO <= IHI <= N; if N = 0, ILO=1 and IHI=0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA, N) !> On entry, the N-by-N upper Hessenberg matrix A. !> On exit, if JOB = 'S', A contains the upper triangular !> matrix S from the generalized Schur factorization. !> If JOB = 'E', the diagonal blocks of A match those of S, but !> the rest of A is unspecified. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max( 1, N ). !> |
| [in,out] | B | !> B is COMPLEX*16 array, dimension (LDB, N) !> On entry, the N-by-N upper triangular matrix B. !> On exit, if JOB = 'S', B contains the upper triangular !> matrix P from the generalized Schur factorization; !> If JOB = 'E', the diagonal blocks of B match those of P, but !> the rest of B is unspecified. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max( 1, N ). !> |
| [out] | ALPHA | !> ALPHA is COMPLEX*16 array, dimension (N) !> Each scalar alpha defining an eigenvalue !> of GNEP. !> |
| [out] | BETA | !> BETA is COMPLEX*16 array, dimension (N) !> The scalars beta that define the eigenvalues of GNEP. !> Together, the quantities alpha = ALPHA(j) and !> beta = BETA(j) represent the j-th eigenvalue of the matrix !> pair (A,B), in one of the forms lambda = alpha/beta or !> mu = beta/alpha. Since either lambda or mu may overflow, !> they should not, in general, be computed. !> |
| [in,out] | Q | !> Q is COMPLEX*16 array, dimension (LDQ, N) !> On entry, if COMPQ = 'V', the unitary matrix Q1 used in !> the reduction of (A,B) to generalized Hessenberg form. !> On exit, if COMPQ = 'I', the unitary matrix of left Schur !> vectors of (A,B), and if COMPQ = 'V', the unitary matrix !> of left Schur vectors of (A,B). !> Not referenced if COMPQ = 'N'. !> |
| [in] | LDQ | !> LDQ is INTEGER !> The leading dimension of the array Q. LDQ >= 1. !> If COMPQ='V' or 'I', then LDQ >= N. !> |
| [in,out] | Z | !> Z is COMPLEX*16 array, dimension (LDZ, N) !> On entry, if COMPZ = 'V', the unitary matrix Z1 used in !> the reduction of (A,B) to generalized Hessenberg form. !> On exit, if COMPZ = 'I', the unitary matrix of !> right Schur vectors of (H,T), and if COMPZ = 'V', the !> unitary matrix of right Schur vectors of (A,B). !> Not referenced if COMPZ = 'N'. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1. !> If COMPZ='V' or 'I', then LDZ >= N. !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO >= 0, WORK(1) returns the optimal LWORK. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (N) !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= max(1,N). !> !> 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. !> |
| [in] | REC | !> REC is INTEGER !> REC indicates the current recursion level. Should be set !> to 0 on first call. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> = 1,...,N: the QZ iteration did not converge. (A,B) is not !> in Schur form, but ALPHA(i) and !> BETA(i), i=INFO+1,...,N should be correct. !> |
Definition at line 280 of file zlaqz0.f.
| subroutine zlaqz1 | ( | logical, intent(in) | ilq, |
| logical, intent(in) | ilz, | ||
| integer, intent(in) | k, | ||
| integer, intent(in) | istartm, | ||
| integer, intent(in) | istopm, | ||
| integer, intent(in) | ihi, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer, intent(in) | lda, | ||
| complex*16, dimension( ldb, * ) | b, | ||
| integer, intent(in) | ldb, | ||
| integer, intent(in) | nq, | ||
| integer, intent(in) | qstart, | ||
| complex*16, dimension( ldq, * ) | q, | ||
| integer, intent(in) | ldq, | ||
| integer, intent(in) | nz, | ||
| integer, intent(in) | zstart, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer, intent(in) | ldz ) |
ZLAQZ1
Download ZLAQZ1 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZLAQZ1 chases a 1x1 shift bulge in a matrix pencil down a single position !>
| [in] | ILQ | !> ILQ is LOGICAL !> Determines whether or not to update the matrix Q !> |
| [in] | ILZ | !> ILZ is LOGICAL !> Determines whether or not to update the matrix Z !> |
| [in] | K | !> K is INTEGER !> Index indicating the position of the bulge. !> On entry, the bulge is located in !> (A(k+1,k),B(k+1,k)). !> On exit, the bulge is located in !> (A(k+2,k+1),B(k+2,k+1)). !> |
| [in] | ISTARTM | !> ISTARTM is INTEGER !> |
| [in] | ISTOPM | !> ISTOPM is INTEGER !> Updates to (A,B) are restricted to !> (istartm:k+2,k:istopm). It is assumed !> without checking that istartm <= k+1 and !> k+2 <= istopm !> |
| [in] | IHI | !> IHI is INTEGER !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of A as declared in !> the calling procedure. !> |
| [in,out] | B | !> B is COMPLEX*16 array, dimension (LDB,N) !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of B as declared in !> the calling procedure. !> |
| [in] | NQ | !> NQ is INTEGER !> The order of the matrix Q !> |
| [in] | QSTART | !> QSTART is INTEGER !> Start index of the matrix Q. Rotations are applied !> To columns k+2-qStart:k+3-qStart of Q. !> |
| [in,out] | Q | !> Q is COMPLEX*16 array, dimension (LDQ,NQ) !> |
| [in] | LDQ | !> LDQ is INTEGER !> The leading dimension of Q as declared in !> the calling procedure. !> |
| [in] | NZ | !> NZ is INTEGER !> The order of the matrix Z !> |
| [in] | ZSTART | !> ZSTART is INTEGER !> Start index of the matrix Z. Rotations are applied !> To columns k+1-qStart:k+2-qStart of Z. !> |
| [in,out] | Z | !> Z is COMPLEX*16 array, dimension (LDZ,NZ) !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of Q as declared in !> the calling procedure. !> |
Definition at line 171 of file zlaqz1.f.
| recursive subroutine zlaqz2 | ( | logical, intent(in) | ilschur, |
| logical, intent(in) | ilq, | ||
| logical, intent(in) | ilz, | ||
| integer, intent(in) | n, | ||
| integer, intent(in) | ilo, | ||
| integer, intent(in) | ihi, | ||
| integer, intent(in) | nw, | ||
| complex*16, dimension( lda, * ), intent(inout) | a, | ||
| integer, intent(in) | lda, | ||
| complex*16, dimension( ldb, * ), intent(inout) | b, | ||
| integer, intent(in) | ldb, | ||
| complex*16, dimension( ldq, * ), intent(inout) | q, | ||
| integer, intent(in) | ldq, | ||
| complex*16, dimension( ldz, * ), intent(inout) | z, | ||
| integer, intent(in) | ldz, | ||
| integer, intent(out) | ns, | ||
| integer, intent(out) | nd, | ||
| complex*16, dimension( * ), intent(inout) | alpha, | ||
| complex*16, dimension( * ), intent(inout) | beta, | ||
| complex*16, dimension( ldqc, * ) | qc, | ||
| integer, intent(in) | ldqc, | ||
| complex*16, dimension( ldzc, * ) | zc, | ||
| integer, intent(in) | ldzc, | ||
| complex*16, dimension( * ) | work, | ||
| integer, intent(in) | lwork, | ||
| double precision, dimension( * ) | rwork, | ||
| integer, intent(in) | rec, | ||
| integer, intent(out) | info ) |
ZLAQZ2
Download ZLAQZ2 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZLAQZ2 performs AED !>
| [in] | ILSCHUR | !> ILSCHUR is LOGICAL !> Determines whether or not to update the full Schur form !> |
| [in] | ILQ | !> ILQ is LOGICAL !> Determines whether or not to update the matrix Q !> |
| [in] | ILZ | !> ILZ is LOGICAL !> Determines whether or not to update the matrix Z !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, Q, and Z. N >= 0. !> |
| [in] | ILO | !> ILO is INTEGER !> |
| [in] | IHI | !> IHI is INTEGER !> ILO and IHI mark the rows and columns of (A,B) which !> are to be normalized !> |
| [in] | NW | !> NW is INTEGER !> The desired size of the deflation window. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA, N) !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max( 1, N ). !> |
| [in,out] | B | !> B is COMPLEX*16 array, dimension (LDB, N) !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max( 1, N ). !> |
| [in,out] | Q | !> Q is COMPLEX*16 array, dimension (LDQ, N) !> |
| [in] | LDQ | !> LDQ is INTEGER !> |
| [in,out] | Z | !> Z is COMPLEX*16 array, dimension (LDZ, N) !> |
| [in] | LDZ | !> LDZ is INTEGER !> |
| [out] | NS | !> NS is INTEGER !> The number of unconverged eigenvalues available to !> use as shifts. !> |
| [out] | ND | !> ND is INTEGER !> The number of converged eigenvalues found. !> |
| [out] | ALPHA | !> ALPHA is COMPLEX*16 array, dimension (N) !> Each scalar alpha defining an eigenvalue !> of GNEP. !> |
| [out] | BETA | !> BETA is COMPLEX*16 array, dimension (N) !> The scalars beta that define the eigenvalues of GNEP. !> Together, the quantities alpha = ALPHA(j) and !> beta = BETA(j) represent the j-th eigenvalue of the matrix !> pair (A,B), in one of the forms lambda = alpha/beta or !> mu = beta/alpha. Since either lambda or mu may overflow, !> they should not, in general, be computed. !> |
| [in,out] | QC | !> QC is COMPLEX*16 array, dimension (LDQC, NW) !> |
| [in] | LDQC | !> LDQC is INTEGER !> |
| [in,out] | ZC | !> ZC is COMPLEX*16 array, dimension (LDZC, NW) !> |
| [in] | LDZC | !> LDZ is INTEGER !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO >= 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= max(1,N). !> !> 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. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (N) !> |
| [in] | REC | !> REC is INTEGER !> REC indicates the current recursion level. Should be set !> to 0 on first call. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 230 of file zlaqz2.f.
| subroutine zlaqz3 | ( | logical, intent(in) | ilschur, |
| logical, intent(in) | ilq, | ||
| logical, intent(in) | ilz, | ||
| integer, intent(in) | n, | ||
| integer, intent(in) | ilo, | ||
| integer, intent(in) | ihi, | ||
| integer, intent(in) | nshifts, | ||
| integer, intent(in) | nblock_desired, | ||
| complex*16, dimension( * ), intent(inout) | alpha, | ||
| complex*16, dimension( * ), intent(inout) | beta, | ||
| complex*16, dimension( lda, * ), intent(inout) | a, | ||
| integer, intent(in) | lda, | ||
| complex*16, dimension( ldb, * ), intent(inout) | b, | ||
| integer, intent(in) | ldb, | ||
| complex*16, dimension( ldq, * ), intent(inout) | q, | ||
| integer, intent(in) | ldq, | ||
| complex*16, dimension( ldz, * ), intent(inout) | z, | ||
| integer, intent(in) | ldz, | ||
| complex*16, dimension( ldqc, * ), intent(inout) | qc, | ||
| integer, intent(in) | ldqc, | ||
| complex*16, dimension( ldzc, * ), intent(inout) | zc, | ||
| integer, intent(in) | ldzc, | ||
| complex*16, dimension( * ), intent(inout) | work, | ||
| integer, intent(in) | lwork, | ||
| integer, intent(out) | info ) |
ZLAQZ3
Download ZLAQZ3 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZLAQZ3 Executes a single multishift QZ sweep !>
| [in] | ILSCHUR | !> ILSCHUR is LOGICAL !> Determines whether or not to update the full Schur form !> |
| [in] | ILQ | !> ILQ is LOGICAL !> Determines whether or not to update the matrix Q !> |
| [in] | ILZ | !> ILZ is LOGICAL !> Determines whether or not to update the matrix Z !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, Q, and Z. N >= 0. !> |
| [in] | ILO | !> ILO is INTEGER !> |
| [in] | IHI | !> IHI is INTEGER !> |
| [in] | NSHIFTS | !> NSHIFTS is INTEGER !> The desired number of shifts to use !> |
| [in] | NBLOCK_DESIRED | !> NBLOCK_DESIRED is INTEGER !> The desired size of the computational windows !> |
| [in] | ALPHA | !> ALPHA is COMPLEX*16 array. SR contains !> the alpha parts of the shifts to use. !> |
| [in] | BETA | !> BETA is COMPLEX*16 array. SS contains !> the scale of the shifts to use. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA, N) !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max( 1, N ). !> |
| [in,out] | B | !> B is COMPLEX*16 array, dimension (LDB, N) !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max( 1, N ). !> |
| [in,out] | Q | !> Q is COMPLEX*16 array, dimension (LDQ, N) !> |
| [in] | LDQ | !> LDQ is INTEGER !> |
| [in,out] | Z | !> Z is COMPLEX*16 array, dimension (LDZ, N) !> |
| [in] | LDZ | !> LDZ is INTEGER !> |
| [in,out] | QC | !> QC is COMPLEX*16 array, dimension (LDQC, NBLOCK_DESIRED) !> |
| [in] | LDQC | !> LDQC is INTEGER !> |
| [in,out] | ZC | !> ZC is COMPLEX*16 array, dimension (LDZC, NBLOCK_DESIRED) !> |
| [in] | LDZC | !> LDZ is INTEGER !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO >= 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= max(1,N). !> !> 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. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 204 of file zlaqz3.f.
| subroutine zlaunhr_col_getrfnp | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | d, | ||
| integer | info ) |
ZLAUNHR_COL_GETRFNP
Download ZLAUNHR_COL_GETRFNP + dependencies [TGZ] [ZIP] [TXT]
!> !> ZLAUNHR_COL_GETRFNP computes the modified LU factorization without !> pivoting of a complex general M-by-N matrix A. The factorization has !> the form: !> !> A - S = L * U, !> !> where: !> S is a m-by-n diagonal sign matrix with the diagonal D, so that !> D(i) = S(i,i), 1 <= i <= min(M,N). The diagonal D is constructed !> as D(i)=-SIGN(A(i,i)), where A(i,i) is the value after performing !> i-1 steps of Gaussian elimination. This means that the diagonal !> element at each step of Gaussian elimination is !> at least one in absolute value (so that division-by-zero not !> not possible during the division by the diagonal element); !> !> L is a M-by-N lower triangular matrix with unit diagonal elements !> (lower trapezoidal if M > N); !> !> and U is a M-by-N upper triangular matrix !> (upper trapezoidal if M < N). !> !> This routine is an auxiliary routine used in the Householder !> reconstruction routine ZUNHR_COL. In ZUNHR_COL, this routine is !> applied to an M-by-N matrix A with orthonormal columns, where each !> element is bounded by one in absolute value. With the choice of !> the matrix S above, one can show that the diagonal element at each !> step of Gaussian elimination is the largest (in absolute value) in !> the column on or below the diagonal, so that no pivoting is required !> for numerical stability [1]. !> !> For more details on the Householder reconstruction algorithm, !> including the modified LU factorization, see [1]. !> !> This is the blocked right-looking version of the algorithm, !> calling Level 3 BLAS to update the submatrix. To factorize a block, !> this routine calls the recursive routine ZLAUNHR_COL_GETRFNP2. !> !> [1] , !> G. Ballard, J. Demmel, L. Grigori, M. Jacquelin, H.D. Nguyen, !> E. Solomonik, J. Parallel Distrib. Comput., !> vol. 85, pp. 3-31, 2015. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N matrix to be factored. !> On exit, the factors L and U from the factorization !> A-S=L*U; the unit diagonal elements of L are not stored. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | D | !> D is COMPLEX*16 array, dimension min(M,N) !> The diagonal elements of the diagonal M-by-N sign matrix S, !> D(i) = S(i,i), where 1 <= i <= min(M,N). The elements can be !> only ( +1.0, 0.0 ) or (-1.0, 0.0 ). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> November 2019, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !>
Definition at line 145 of file zlaunhr_col_getrfnp.f.
| recursive subroutine zlaunhr_col_getrfnp2 | ( | integer | m, |
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( * ) | d, | ||
| integer | info ) |
ZLAUNHR_COL_GETRFNP2
Download ZLAUNHR_COL_GETRFNP2 + dependencies [TGZ] [ZIP] [TXT]
!> !> ZLAUNHR_COL_GETRFNP2 computes the modified LU factorization without !> pivoting of a complex general M-by-N matrix A. The factorization has !> the form: !> !> A - S = L * U, !> !> where: !> S is a m-by-n diagonal sign matrix with the diagonal D, so that !> D(i) = S(i,i), 1 <= i <= min(M,N). The diagonal D is constructed !> as D(i)=-SIGN(A(i,i)), where A(i,i) is the value after performing !> i-1 steps of Gaussian elimination. This means that the diagonal !> element at each step of Gaussian elimination is at !> least one in absolute value (so that division-by-zero not !> possible during the division by the diagonal element); !> !> L is a M-by-N lower triangular matrix with unit diagonal elements !> (lower trapezoidal if M > N); !> !> and U is a M-by-N upper triangular matrix !> (upper trapezoidal if M < N). !> !> This routine is an auxiliary routine used in the Householder !> reconstruction routine ZUNHR_COL. In ZUNHR_COL, this routine is !> applied to an M-by-N matrix A with orthonormal columns, where each !> element is bounded by one in absolute value. With the choice of !> the matrix S above, one can show that the diagonal element at each !> step of Gaussian elimination is the largest (in absolute value) in !> the column on or below the diagonal, so that no pivoting is required !> for numerical stability [1]. !> !> For more details on the Householder reconstruction algorithm, !> including the modified LU factorization, see [1]. !> !> This is the recursive version of the LU factorization algorithm. !> Denote A - S by B. The algorithm divides the matrix B into four !> submatrices: !> !> [ B11 | B12 ] where B11 is n1 by n1, !> B = [ -----|----- ] B21 is (m-n1) by n1, !> [ B21 | B22 ] B12 is n1 by n2, !> B22 is (m-n1) by n2, !> with n1 = min(m,n)/2, n2 = n-n1. !> !> !> The subroutine calls itself to factor B11, solves for B21, !> solves for B12, updates B22, then calls itself to factor B22. !> !> For more details on the recursive LU algorithm, see [2]. !> !> ZLAUNHR_COL_GETRFNP2 is called to factorize a block by the blocked !> routine ZLAUNHR_COL_GETRFNP, which uses blocked code calling !> Level 3 BLAS to update the submatrix. However, ZLAUNHR_COL_GETRFNP2 !> is self-sufficient and can be used without ZLAUNHR_COL_GETRFNP. !> !> [1] , !> G. Ballard, J. Demmel, L. Grigori, M. Jacquelin, H.D. Nguyen, !> E. Solomonik, J. Parallel Distrib. Comput., !> vol. 85, pp. 3-31, 2015. !> !> [2] , F. Gustavson, IBM J. of Res. and Dev., !> vol. 41, no. 6, pp. 737-755, 1997. !>
| [in] | M | !> M is INTEGER !> The number of rows of the matrix A. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The number of columns of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the M-by-N matrix to be factored. !> On exit, the factors L and U from the factorization !> A-S=L*U; the unit diagonal elements of L are not stored. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | D | !> D is COMPLEX*16 array, dimension min(M,N) !> The diagonal elements of the diagonal M-by-N sign matrix S, !> D(i) = S(i,i), where 1 <= i <= min(M,N). The elements can be !> only ( +1.0, 0.0 ) or (-1.0, 0.0 ). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> November 2019, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !>
Definition at line 166 of file zlaunhr_col_getrfnp2.f.
| subroutine ztgevc | ( | character | side, |
| character | howmny, | ||
| logical, dimension( * ) | select, | ||
| integer | n, | ||
| complex*16, dimension( lds, * ) | s, | ||
| integer | lds, | ||
| complex*16, dimension( ldp, * ) | p, | ||
| integer | ldp, | ||
| complex*16, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| complex*16, dimension( ldvr, * ) | vr, | ||
| integer | ldvr, | ||
| integer | mm, | ||
| integer | m, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | info ) |
ZTGEVC
Download ZTGEVC + dependencies [TGZ] [ZIP] [TXT]
!> !> ZTGEVC computes some or all of the right and/or left eigenvectors of !> a pair of complex matrices (S,P), where S and P are upper triangular. !> Matrix pairs of this type are produced by the generalized Schur !> factorization of a complex matrix pair (A,B): !> !> A = Q*S*Z**H, B = Q*P*Z**H !> !> as computed by ZGGHRD + ZHGEQZ. !> !> The right eigenvector x and the left eigenvector y of (S,P) !> corresponding to an eigenvalue w are defined by: !> !> S*x = w*P*x, (y**H)*S = w*(y**H)*P, !> !> where y**H denotes the conjugate tranpose of y. !> The eigenvalues are not input to this routine, but are computed !> directly from the diagonal elements of S and P. !> !> This routine returns the matrices X and/or Y of right and left !> eigenvectors of (S,P), or the products Z*X and/or Q*Y, !> where Z and Q are input matrices. !> If Q and Z are the unitary factors from the generalized Schur !> factorization of a matrix pair (A,B), then Z*X and Q*Y !> are the matrices of right and left eigenvectors of (A,B). !>
| [in] | SIDE | !> SIDE is CHARACTER*1 !> = 'R': compute right eigenvectors only; !> = 'L': compute left eigenvectors only; !> = 'B': compute both right and left eigenvectors. !> |
| [in] | HOWMNY | !> HOWMNY is CHARACTER*1 !> = 'A': compute all right and/or left eigenvectors; !> = 'B': compute all right and/or left eigenvectors, !> backtransformed by the matrices in VR and/or VL; !> = 'S': compute selected right and/or left eigenvectors, !> specified by the logical array SELECT. !> |
| [in] | SELECT | !> SELECT is LOGICAL array, dimension (N) !> If HOWMNY='S', SELECT specifies the eigenvectors to be !> computed. The eigenvector corresponding to the j-th !> eigenvalue is computed if SELECT(j) = .TRUE.. !> Not referenced if HOWMNY = 'A' or 'B'. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices S and P. N >= 0. !> |
| [in] | S | !> S is COMPLEX*16 array, dimension (LDS,N) !> The upper triangular matrix S from a generalized Schur !> factorization, as computed by ZHGEQZ. !> |
| [in] | LDS | !> LDS is INTEGER !> The leading dimension of array S. LDS >= max(1,N). !> |
| [in] | P | !> P is COMPLEX*16 array, dimension (LDP,N) !> The upper triangular matrix P from a generalized Schur !> factorization, as computed by ZHGEQZ. P must have real !> diagonal elements. !> |
| [in] | LDP | !> LDP is INTEGER !> The leading dimension of array P. LDP >= max(1,N). !> |
| [in,out] | VL | !> VL is COMPLEX*16 array, dimension (LDVL,MM) !> On entry, if SIDE = 'L' or 'B' and HOWMNY = 'B', VL must !> contain an N-by-N matrix Q (usually the unitary matrix Q !> of left Schur vectors returned by ZHGEQZ). !> On exit, if SIDE = 'L' or 'B', VL contains: !> if HOWMNY = 'A', the matrix Y of left eigenvectors of (S,P); !> if HOWMNY = 'B', the matrix Q*Y; !> if HOWMNY = 'S', the left eigenvectors of (S,P) specified by !> SELECT, stored consecutively in the columns of !> VL, in the same order as their eigenvalues. !> Not referenced if SIDE = 'R'. !> |
| [in] | LDVL | !> LDVL is INTEGER !> The leading dimension of array VL. LDVL >= 1, and if !> SIDE = 'L' or 'l' or 'B' or 'b', LDVL >= N. !> |
| [in,out] | VR | !> VR is COMPLEX*16 array, dimension (LDVR,MM) !> On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must !> contain an N-by-N matrix Q (usually the unitary matrix Z !> of right Schur vectors returned by ZHGEQZ). !> On exit, if SIDE = 'R' or 'B', VR contains: !> if HOWMNY = 'A', the matrix X of right eigenvectors of (S,P); !> if HOWMNY = 'B', the matrix Z*X; !> if HOWMNY = 'S', the right eigenvectors of (S,P) specified by !> SELECT, stored consecutively in the columns of !> VR, in the same order as their eigenvalues. !> Not referenced if SIDE = 'L'. !> |
| [in] | LDVR | !> LDVR is INTEGER !> The leading dimension of the array VR. LDVR >= 1, and if !> SIDE = 'R' or 'B', LDVR >= N. !> |
| [in] | MM | !> MM is INTEGER !> The number of columns in the arrays VL and/or VR. MM >= M. !> |
| [out] | M | !> M is INTEGER !> The number of columns in the arrays VL and/or VR actually !> used to store the eigenvectors. If HOWMNY = 'A' or 'B', M !> is set to N. Each selected eigenvector occupies one column. !> |
| [out] | WORK | !> WORK is COMPLEX*16 array, dimension (2*N) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, the i-th argument had an illegal value. !> |
Definition at line 217 of file ztgevc.f.
| subroutine ztgexc | ( | logical | wantq, |
| logical | wantz, | ||
| integer | n, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex*16, dimension( ldq, * ) | q, | ||
| integer | ldq, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| integer | ifst, | ||
| integer | ilst, | ||
| integer | info ) |
ZTGEXC
Download ZTGEXC + dependencies [TGZ] [ZIP] [TXT]
!> !> ZTGEXC reorders the generalized Schur decomposition of a complex !> matrix pair (A,B), using an unitary equivalence transformation !> (A, B) := Q * (A, B) * Z**H, so that the diagonal block of (A, B) with !> row index IFST is moved to row ILST. !> !> (A, B) must be in generalized Schur canonical form, that is, A and !> B are both upper triangular. !> !> Optionally, the matrices Q and Z of generalized Schur vectors are !> updated. !> !> Q(in) * A(in) * Z(in)**H = Q(out) * A(out) * Z(out)**H !> Q(in) * B(in) * Z(in)**H = Q(out) * B(out) * Z(out)**H !>
| [in] | WANTQ | !> WANTQ is LOGICAL !> .TRUE. : update the left transformation matrix Q; !> .FALSE.: do not update Q. !> |
| [in] | WANTZ | !> WANTZ is LOGICAL !> .TRUE. : update the right transformation matrix Z; !> .FALSE.: do not update Z. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A and B. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX*16 array, dimension (LDA,N) !> On entry, the upper triangular matrix A in the pair (A, B). !> On exit, the updated matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in,out] | B | !> B is COMPLEX*16 array, dimension (LDB,N) !> On entry, the upper triangular matrix B in the pair (A, B). !> On exit, the updated matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | Q | !> Q is COMPLEX*16 array, dimension (LDQ,N) !> On entry, if WANTQ = .TRUE., the unitary matrix Q. !> On exit, the updated matrix Q. !> If WANTQ = .FALSE., Q is not referenced. !> |
| [in] | LDQ | !> LDQ is INTEGER !> The leading dimension of the array Q. LDQ >= 1; !> If WANTQ = .TRUE., LDQ >= N. !> |
| [in,out] | Z | !> Z is COMPLEX*16 array, dimension (LDZ,N) !> On entry, if WANTZ = .TRUE., the unitary matrix Z. !> On exit, the updated matrix Z. !> If WANTZ = .FALSE., Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1; !> If WANTZ = .TRUE., LDZ >= N. !> |
| [in] | IFST | !> IFST is INTEGER !> |
| [in,out] | ILST | !> ILST is INTEGER !> Specify the reordering of the diagonal blocks of (A, B). !> The block with row index IFST is moved to row ILST, by a !> sequence of swapping between adjacent blocks. !> |
| [out] | INFO | !> INFO is INTEGER !> =0: Successful exit. !> <0: if INFO = -i, the i-th argument had an illegal value. !> =1: The transformed matrix pair (A, B) would be too far !> from generalized Schur form; the problem is ill- !> conditioned. (A, B) may have been partially reordered, !> and ILST points to the first row of the current !> position of the block being moved. !> |
Definition at line 198 of file ztgexc.f.