Functions | |
| subroutine | cgees (jobvs, sort, select, n, a, lda, sdim, w, vs, ldvs, work, lwork, rwork, bwork, info) |
| CGEES computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices | |
| subroutine | cgeesx (jobvs, sort, select, sense, n, a, lda, sdim, w, vs, ldvs, rconde, rcondv, work, lwork, rwork, bwork, info) |
| CGEESX computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices | |
| subroutine | cgeev (jobvl, jobvr, n, a, lda, w, vl, ldvl, vr, ldvr, work, lwork, rwork, info) |
| CGEEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices | |
| subroutine | cgeevx (balanc, jobvl, jobvr, sense, n, a, lda, w, vl, ldvl, vr, ldvr, ilo, ihi, scale, abnrm, rconde, rcondv, work, lwork, rwork, info) |
| CGEEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices | |
| subroutine | cgges (jobvsl, jobvsr, sort, selctg, n, a, lda, b, ldb, sdim, alpha, beta, vsl, ldvsl, vsr, ldvsr, work, lwork, rwork, bwork, info) |
| CGGES computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices | |
| subroutine | cgges3 (jobvsl, jobvsr, sort, selctg, n, a, lda, b, ldb, sdim, alpha, beta, vsl, ldvsl, vsr, ldvsr, work, lwork, rwork, bwork, info) |
| CGGES3 computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices (blocked algorithm) | |
| subroutine | cggesx (jobvsl, jobvsr, sort, selctg, sense, n, a, lda, b, ldb, sdim, alpha, beta, vsl, ldvsl, vsr, ldvsr, rconde, rcondv, work, lwork, rwork, iwork, liwork, bwork, info) |
| CGGESX computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices | |
| subroutine | cggev (jobvl, jobvr, n, a, lda, b, ldb, alpha, beta, vl, ldvl, vr, ldvr, work, lwork, rwork, info) |
| CGGEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices | |
| subroutine | cggev3 (jobvl, jobvr, n, a, lda, b, ldb, alpha, beta, vl, ldvl, vr, ldvr, work, lwork, rwork, info) |
| CGGEV3 computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices (blocked algorithm) | |
| subroutine | cggevx (balanc, jobvl, jobvr, sense, n, a, lda, b, ldb, alpha, beta, vl, ldvl, vr, ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv, work, lwork, rwork, iwork, bwork, info) |
| CGGEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices | |
| subroutine | cgegs (jobvsl, jobvsr, n, a, lda, b, ldb, alpha, beta, vsl, ldvsl, vsr, ldvsr, work, lwork, rwork, info) |
| CGEEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices | |
| subroutine | cgegv (jobvl, jobvr, n, a, lda, b, ldb, alpha, beta, vl, ldvl, vr, ldvr, work, lwork, rwork, info) |
| CGEEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices | |
This is the group of complex eigenvalue driver functions for GE matrices
| subroutine cgees | ( | character | jobvs, |
| character | sort, | ||
| external | select, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer | sdim, | ||
| complex, dimension( * ) | w, | ||
| complex, dimension( ldvs, * ) | vs, | ||
| integer | ldvs, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| logical, dimension( * ) | bwork, | ||
| integer | info ) |
CGEES computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices
Download CGEES + dependencies [TGZ] [ZIP] [TXT]
!> !> CGEES computes for an N-by-N complex nonsymmetric matrix A, the !> eigenvalues, the Schur form T, and, optionally, the matrix of Schur !> vectors Z. This gives the Schur factorization A = Z*T*(Z**H). !> !> Optionally, it also orders the eigenvalues on the diagonal of the !> Schur form so that selected eigenvalues are at the top left. !> The leading columns of Z then form an orthonormal basis for the !> invariant subspace corresponding to the selected eigenvalues. !> !> A complex matrix is in Schur form if it is upper triangular. !>
| [in] | JOBVS | !> JOBVS is CHARACTER*1 !> = 'N': Schur vectors are not computed; !> = 'V': Schur vectors are computed. !> |
| [in] | SORT | !> SORT is CHARACTER*1 !> Specifies whether or not to order the eigenvalues on the !> diagonal of the Schur form. !> = 'N': Eigenvalues are not ordered: !> = 'S': Eigenvalues are ordered (see SELECT). !> |
| [in] | SELECT | !> SELECT is a LOGICAL FUNCTION of one COMPLEX argument !> SELECT must be declared EXTERNAL in the calling subroutine. !> If SORT = 'S', SELECT is used to select eigenvalues to order !> to the top left of the Schur form. !> IF SORT = 'N', SELECT is not referenced. !> The eigenvalue W(j) is selected if SELECT(W(j)) is true. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> On exit, A has been overwritten by its Schur form T. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | SDIM | !> SDIM is INTEGER !> If SORT = 'N', SDIM = 0. !> If SORT = 'S', SDIM = number of eigenvalues for which !> SELECT is true. !> |
| [out] | W | !> W is COMPLEX array, dimension (N) !> W contains the computed eigenvalues, in the same order that !> they appear on the diagonal of the output Schur form T. !> |
| [out] | VS | !> VS is COMPLEX array, dimension (LDVS,N) !> If JOBVS = 'V', VS contains the unitary matrix Z of Schur !> vectors. !> If JOBVS = 'N', VS is not referenced. !> |
| [in] | LDVS | !> LDVS is INTEGER !> The leading dimension of the array VS. LDVS >= 1; if !> JOBVS = 'V', LDVS >= N. !> |
| [out] | WORK | !> WORK is COMPLEX 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,2*N). !> For good performance, LWORK must 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] | RWORK | !> RWORK is REAL array, dimension (N) !> |
| [out] | BWORK | !> BWORK is LOGICAL array, dimension (N) !> Not referenced if SORT = 'N'. !> |
| [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 !> <= N: the QR algorithm failed to compute all the !> eigenvalues; elements 1:ILO-1 and i+1:N of W !> contain those eigenvalues which have converged; !> if JOBVS = 'V', VS contains the matrix which !> reduces A to its partially converged Schur form. !> = N+1: the eigenvalues could not be reordered because !> some eigenvalues were too close to separate (the !> problem is very ill-conditioned); !> = N+2: after reordering, roundoff changed values of !> some complex eigenvalues so that leading !> eigenvalues in the Schur form no longer satisfy !> SELECT = .TRUE.. This could also be caused by !> underflow due to scaling. !> |
Definition at line 195 of file cgees.f.
| subroutine cgeesx | ( | character | jobvs, |
| character | sort, | ||
| external | select, | ||
| character | sense, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer | sdim, | ||
| complex, dimension( * ) | w, | ||
| complex, dimension( ldvs, * ) | vs, | ||
| integer | ldvs, | ||
| real | rconde, | ||
| real | rcondv, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| logical, dimension( * ) | bwork, | ||
| integer | info ) |
CGEESX computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices
Download CGEESX + dependencies [TGZ] [ZIP] [TXT]
!> !> CGEESX computes for an N-by-N complex nonsymmetric matrix A, the !> eigenvalues, the Schur form T, and, optionally, the matrix of Schur !> vectors Z. This gives the Schur factorization A = Z*T*(Z**H). !> !> Optionally, it also orders the eigenvalues on the diagonal of the !> Schur form so that selected eigenvalues are at the top left; !> computes a reciprocal condition number for the average of the !> selected eigenvalues (RCONDE); and computes a reciprocal condition !> number for the right invariant subspace corresponding to the !> selected eigenvalues (RCONDV). The leading columns of Z form an !> orthonormal basis for this invariant subspace. !> !> For further explanation of the reciprocal condition numbers RCONDE !> and RCONDV, see Section 4.10 of the LAPACK Users' Guide (where !> these quantities are called s and sep respectively). !> !> A complex matrix is in Schur form if it is upper triangular. !>
| [in] | JOBVS | !> JOBVS is CHARACTER*1 !> = 'N': Schur vectors are not computed; !> = 'V': Schur vectors are computed. !> |
| [in] | SORT | !> SORT is CHARACTER*1 !> Specifies whether or not to order the eigenvalues on the !> diagonal of the Schur form. !> = 'N': Eigenvalues are not ordered; !> = 'S': Eigenvalues are ordered (see SELECT). !> |
| [in] | SELECT | !> SELECT is a LOGICAL FUNCTION of one COMPLEX argument !> SELECT must be declared EXTERNAL in the calling subroutine. !> If SORT = 'S', SELECT is used to select eigenvalues to order !> to the top left of the Schur form. !> If SORT = 'N', SELECT is not referenced. !> An eigenvalue W(j) is selected if SELECT(W(j)) is true. !> |
| [in] | SENSE | !> SENSE is CHARACTER*1 !> Determines which reciprocal condition numbers are computed. !> = 'N': None are computed; !> = 'E': Computed for average of selected eigenvalues only; !> = 'V': Computed for selected right invariant subspace only; !> = 'B': Computed for both. !> If SENSE = 'E', 'V' or 'B', SORT must equal 'S'. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA, N) !> On entry, the N-by-N matrix A. !> On exit, A is overwritten by its Schur form T. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | SDIM | !> SDIM is INTEGER !> If SORT = 'N', SDIM = 0. !> If SORT = 'S', SDIM = number of eigenvalues for which !> SELECT is true. !> |
| [out] | W | !> W is COMPLEX array, dimension (N) !> W contains the computed eigenvalues, in the same order !> that they appear on the diagonal of the output Schur form T. !> |
| [out] | VS | !> VS is COMPLEX array, dimension (LDVS,N) !> If JOBVS = 'V', VS contains the unitary matrix Z of Schur !> vectors. !> If JOBVS = 'N', VS is not referenced. !> |
| [in] | LDVS | !> LDVS is INTEGER !> The leading dimension of the array VS. LDVS >= 1, and if !> JOBVS = 'V', LDVS >= N. !> |
| [out] | RCONDE | !> RCONDE is REAL !> If SENSE = 'E' or 'B', RCONDE contains the reciprocal !> condition number for the average of the selected eigenvalues. !> Not referenced if SENSE = 'N' or 'V'. !> |
| [out] | RCONDV | !> RCONDV is REAL !> If SENSE = 'V' or 'B', RCONDV contains the reciprocal !> condition number for the selected right invariant subspace. !> Not referenced if SENSE = 'N' or 'E'. !> |
| [out] | WORK | !> WORK is COMPLEX 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,2*N). !> Also, if SENSE = 'E' or 'V' or 'B', LWORK >= 2*SDIM*(N-SDIM), !> where SDIM is the number of selected eigenvalues computed by !> this routine. Note that 2*SDIM*(N-SDIM) <= N*N/2. Note also !> that an error is only returned if LWORK < max(1,2*N), but if !> SENSE = 'E' or 'V' or 'B' this may not be large enough. !> For good performance, LWORK must generally be larger. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates upper bound on the optimal size of the !> array WORK, 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 REAL array, dimension (N) !> |
| [out] | BWORK | !> BWORK is LOGICAL array, dimension (N) !> Not referenced if SORT = 'N'. !> |
| [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 !> <= N: the QR algorithm failed to compute all the !> eigenvalues; elements 1:ILO-1 and i+1:N of W !> contain those eigenvalues which have converged; if !> JOBVS = 'V', VS contains the transformation which !> reduces A to its partially converged Schur form. !> = N+1: the eigenvalues could not be reordered because some !> eigenvalues were too close to separate (the problem !> is very ill-conditioned); !> = N+2: after reordering, roundoff changed values of some !> complex eigenvalues so that leading eigenvalues in !> the Schur form no longer satisfy SELECT=.TRUE. This !> could also be caused by underflow due to scaling. !> |
Definition at line 236 of file cgeesx.f.
| subroutine cgeev | ( | character | jobvl, |
| character | jobvr, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | w, | ||
| complex, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| complex, dimension( ldvr, * ) | vr, | ||
| integer | ldvr, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CGEEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Download CGEEV + dependencies [TGZ] [ZIP] [TXT]
!> !> CGEEV computes for an N-by-N complex nonsymmetric matrix A, the !> eigenvalues and, optionally, the left and/or right eigenvectors. !> !> The right eigenvector v(j) of A satisfies !> A * v(j) = lambda(j) * v(j) !> where lambda(j) is its eigenvalue. !> The left eigenvector u(j) of A satisfies !> u(j)**H * A = lambda(j) * u(j)**H !> where u(j)**H denotes the conjugate transpose of u(j). !> !> The computed eigenvectors are normalized to have Euclidean norm !> equal to 1 and largest component real. !>
| [in] | JOBVL | !> JOBVL is CHARACTER*1 !> = 'N': left eigenvectors of A are not computed; !> = 'V': left eigenvectors of are computed. !> |
| [in] | JOBVR | !> JOBVR is CHARACTER*1 !> = 'N': right eigenvectors of A are not computed; !> = 'V': right eigenvectors of A are computed. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> On exit, A has been overwritten. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | W | !> W is COMPLEX array, dimension (N) !> W contains the computed eigenvalues. !> |
| [out] | VL | !> VL is COMPLEX array, dimension (LDVL,N) !> If JOBVL = 'V', the left eigenvectors u(j) are stored one !> after another in the columns of VL, in the same order !> as their eigenvalues. !> If JOBVL = 'N', VL is not referenced. !> u(j) = VL(:,j), the j-th column of VL. !> |
| [in] | LDVL | !> LDVL is INTEGER !> The leading dimension of the array VL. LDVL >= 1; if !> JOBVL = 'V', LDVL >= N. !> |
| [out] | VR | !> VR is COMPLEX array, dimension (LDVR,N) !> If JOBVR = 'V', the right eigenvectors v(j) are stored one !> after another in the columns of VR, in the same order !> as their eigenvalues. !> If JOBVR = 'N', VR is not referenced. !> v(j) = VR(:,j), the j-th column of VR. !> |
| [in] | LDVR | !> LDVR is INTEGER !> The leading dimension of the array VR. LDVR >= 1; if !> JOBVR = 'V', LDVR >= N. !> |
| [out] | WORK | !> WORK is COMPLEX 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,2*N). !> For good performance, LWORK must 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] | RWORK | !> RWORK is REAL array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: if INFO = i, the QR algorithm failed to compute all the !> eigenvalues, and no eigenvectors have been computed; !> elements i+1:N of W contain eigenvalues which have !> converged. !> |
Definition at line 178 of file cgeev.f.
| subroutine cgeevx | ( | character | balanc, |
| character | jobvl, | ||
| character | jobvr, | ||
| character | sense, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( * ) | w, | ||
| complex, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| complex, dimension( ldvr, * ) | vr, | ||
| integer | ldvr, | ||
| integer | ilo, | ||
| integer | ihi, | ||
| real, dimension( * ) | scale, | ||
| real | abnrm, | ||
| real, dimension( * ) | rconde, | ||
| real, dimension( * ) | rcondv, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CGEEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Download CGEEVX + dependencies [TGZ] [ZIP] [TXT]
!> !> CGEEVX computes for an N-by-N complex nonsymmetric matrix A, the !> eigenvalues and, optionally, the left and/or right eigenvectors. !> !> Optionally also, it computes a balancing transformation to improve !> the conditioning of the eigenvalues and eigenvectors (ILO, IHI, !> SCALE, and ABNRM), reciprocal condition numbers for the eigenvalues !> (RCONDE), and reciprocal condition numbers for the right !> eigenvectors (RCONDV). !> !> The right eigenvector v(j) of A satisfies !> A * v(j) = lambda(j) * v(j) !> where lambda(j) is its eigenvalue. !> The left eigenvector u(j) of A satisfies !> u(j)**H * A = lambda(j) * u(j)**H !> where u(j)**H denotes the conjugate transpose of u(j). !> !> The computed eigenvectors are normalized to have Euclidean norm !> equal to 1 and largest component real. !> !> Balancing a matrix means permuting the rows and columns to make it !> more nearly upper triangular, and applying a diagonal similarity !> transformation D * A * D**(-1), where D is a diagonal matrix, to !> make its rows and columns closer in norm and the condition numbers !> of its eigenvalues and eigenvectors smaller. The computed !> reciprocal condition numbers correspond to the balanced matrix. !> Permuting rows and columns will not change the condition numbers !> (in exact arithmetic) but diagonal scaling will. For further !> explanation of balancing, see section 4.10.2 of the LAPACK !> Users' Guide. !>
| [in] | BALANC | !> BALANC is CHARACTER*1 !> Indicates how the input matrix should be diagonally scaled !> and/or permuted to improve the conditioning of its !> eigenvalues. !> = 'N': Do not diagonally scale or permute; !> = 'P': Perform permutations to make the matrix more nearly !> upper triangular. Do not diagonally scale; !> = 'S': Diagonally scale the matrix, ie. replace A by !> D*A*D**(-1), where D is a diagonal matrix chosen !> to make the rows and columns of A more equal in !> norm. Do not permute; !> = 'B': Both diagonally scale and permute A. !> !> Computed reciprocal condition numbers will be for the matrix !> after balancing and/or permuting. Permuting does not change !> condition numbers (in exact arithmetic), but balancing does. !> |
| [in] | JOBVL | !> JOBVL is CHARACTER*1 !> = 'N': left eigenvectors of A are not computed; !> = 'V': left eigenvectors of A are computed. !> If SENSE = 'E' or 'B', JOBVL must = 'V'. !> |
| [in] | JOBVR | !> JOBVR is CHARACTER*1 !> = 'N': right eigenvectors of A are not computed; !> = 'V': right eigenvectors of A are computed. !> If SENSE = 'E' or 'B', JOBVR must = 'V'. !> |
| [in] | SENSE | !> SENSE is CHARACTER*1 !> Determines which reciprocal condition numbers are computed. !> = 'N': None are computed; !> = 'E': Computed for eigenvalues only; !> = 'V': Computed for right eigenvectors only; !> = 'B': Computed for eigenvalues and right eigenvectors. !> !> If SENSE = 'E' or 'B', both left and right eigenvectors !> must also be computed (JOBVL = 'V' and JOBVR = 'V'). !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> On exit, A has been overwritten. If JOBVL = 'V' or !> JOBVR = 'V', A contains the Schur form of the balanced !> version of the matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | W | !> W is COMPLEX array, dimension (N) !> W contains the computed eigenvalues. !> |
| [out] | VL | !> VL is COMPLEX array, dimension (LDVL,N) !> If JOBVL = 'V', the left eigenvectors u(j) are stored one !> after another in the columns of VL, in the same order !> as their eigenvalues. !> If JOBVL = 'N', VL is not referenced. !> u(j) = VL(:,j), the j-th column of VL. !> |
| [in] | LDVL | !> LDVL is INTEGER !> The leading dimension of the array VL. LDVL >= 1; if !> JOBVL = 'V', LDVL >= N. !> |
| [out] | VR | !> VR is COMPLEX array, dimension (LDVR,N) !> If JOBVR = 'V', the right eigenvectors v(j) are stored one !> after another in the columns of VR, in the same order !> as their eigenvalues. !> If JOBVR = 'N', VR is not referenced. !> v(j) = VR(:,j), the j-th column of VR. !> |
| [in] | LDVR | !> LDVR is INTEGER !> The leading dimension of the array VR. LDVR >= 1; if !> JOBVR = 'V', LDVR >= N. !> |
| [out] | ILO | !> ILO is INTEGER !> |
| [out] | IHI | !> IHI is INTEGER !> ILO and IHI are integer values determined when A was !> balanced. The balanced A(i,j) = 0 if I > J and !> J = 1,...,ILO-1 or I = IHI+1,...,N. !> |
| [out] | SCALE | !> SCALE is REAL array, dimension (N) !> Details of the permutations and scaling factors applied !> when balancing 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] | ABNRM | !> ABNRM is REAL !> The one-norm of the balanced matrix (the maximum !> of the sum of absolute values of elements of any column). !> |
| [out] | RCONDE | !> RCONDE is REAL array, dimension (N) !> RCONDE(j) is the reciprocal condition number of the j-th !> eigenvalue. !> |
| [out] | RCONDV | !> RCONDV is REAL array, dimension (N) !> RCONDV(j) is the reciprocal condition number of the j-th !> right eigenvector. !> |
| [out] | WORK | !> WORK is COMPLEX 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. If SENSE = 'N' or 'E', !> LWORK >= max(1,2*N), and if SENSE = 'V' or 'B', !> LWORK >= N*N+2*N. !> For good performance, LWORK must 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] | RWORK | !> RWORK is REAL array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: if INFO = i, the QR algorithm failed to compute all the !> eigenvalues, and no eigenvectors or condition numbers !> have been computed; elements 1:ILO-1 and i+1:N of W !> contain eigenvalues which have converged. !> |
Definition at line 285 of file cgeevx.f.
| subroutine cgegs | ( | character | jobvsl, |
| character | jobvsr, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( * ) | alpha, | ||
| complex, dimension( * ) | beta, | ||
| complex, dimension( ldvsl, * ) | vsl, | ||
| integer | ldvsl, | ||
| complex, dimension( ldvsr, * ) | vsr, | ||
| integer | ldvsr, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CGEEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Download CGEGS + dependencies [TGZ] [ZIP] [TXT]
!> !> This routine is deprecated and has been replaced by routine CGGES. !> !> CGEGS computes the eigenvalues, Schur form, and, optionally, the !> left and or/right Schur vectors of a complex matrix pair (A,B). !> Given two square matrices A and B, the generalized Schur !> factorization has the form !> !> A = Q*S*Z**H, B = Q*T*Z**H !> !> where Q and Z are unitary matrices and S and T are upper triangular. !> The columns of Q are the left Schur vectors !> and the columns of Z are the right Schur vectors. !> !> If only the eigenvalues of (A,B) are needed, the driver routine !> CGEGV should be used instead. See CGEGV for a description of the !> eigenvalues of the generalized nonsymmetric eigenvalue problem !> (GNEP). !>
| [in] | JOBVSL | !> JOBVSL is CHARACTER*1 !> = 'N': do not compute the left Schur vectors; !> = 'V': compute the left Schur vectors (returned in VSL). !> |
| [in] | JOBVSR | !> JOBVSR is CHARACTER*1 !> = 'N': do not compute the right Schur vectors; !> = 'V': compute the right Schur vectors (returned in VSR). !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, VSL, and VSR. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA, N) !> On entry, the matrix A. !> On exit, the upper triangular matrix S from the generalized !> Schur factorization. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of A. LDA >= max(1,N). !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB, N) !> On entry, the matrix B. !> On exit, the upper triangular matrix T from the generalized !> Schur factorization. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of B. LDB >= max(1,N). !> |
| [out] | ALPHA | !> ALPHA is COMPLEX array, dimension (N) !> The complex scalars alpha that define the eigenvalues of !> GNEP. ALPHA(j) = S(j,j), the diagonal element of the Schur !> form of A. !> |
| [out] | BETA | !> BETA is COMPLEX array, dimension (N) !> The non-negative real scalars beta that define the !> eigenvalues of GNEP. BETA(j) = T(j,j), the diagonal element !> of the triangular factor T. !> !> 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. !> |
| [out] | VSL | !> VSL is COMPLEX array, dimension (LDVSL,N) !> If JOBVSL = 'V', the matrix of left Schur vectors Q. !> Not referenced if JOBVSL = 'N'. !> |
| [in] | LDVSL | !> LDVSL is INTEGER !> The leading dimension of the matrix VSL. LDVSL >= 1, and !> if JOBVSL = 'V', LDVSL >= N. !> |
| [out] | VSR | !> VSR is COMPLEX array, dimension (LDVSR,N) !> If JOBVSR = 'V', the matrix of right Schur vectors Z. !> Not referenced if JOBVSR = 'N'. !> |
| [in] | LDVSR | !> LDVSR is INTEGER !> The leading dimension of the matrix VSR. LDVSR >= 1, and !> if JOBVSR = 'V', LDVSR >= N. !> |
| [out] | WORK | !> WORK is COMPLEX 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,2*N). !> For good performance, LWORK must generally be larger. !> To compute the optimal value of LWORK, call ILAENV to get !> blocksizes (for CGEQRF, CUNMQR, and CUNGQR.) Then compute: !> NB -- MAX of the blocksizes for CGEQRF, CUNMQR, and CUNGQR; !> the optimal LWORK is N*(NB+1). !> !> 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 REAL array, dimension (3*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 failed. (A,B) are not in Schur !> form, but ALPHA(j) and BETA(j) should be correct for !> j=INFO+1,...,N. !> > N: errors that usually indicate LAPACK problems: !> =N+1: error return from CGGBAL !> =N+2: error return from CGEQRF !> =N+3: error return from CUNMQR !> =N+4: error return from CUNGQR !> =N+5: error return from CGGHRD !> =N+6: error return from CHGEQZ (other than failed !> iteration) !> =N+7: error return from CGGBAK (computing VSL) !> =N+8: error return from CGGBAK (computing VSR) !> =N+9: error return from CLASCL (various places) !> |
Definition at line 222 of file cgegs.f.
| subroutine cgegv | ( | character | jobvl, |
| character | jobvr, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( * ) | alpha, | ||
| complex, dimension( * ) | beta, | ||
| complex, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| complex, dimension( ldvr, * ) | vr, | ||
| integer | ldvr, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CGEEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Download CGEGV + dependencies [TGZ] [ZIP] [TXT]
!> !> This routine is deprecated and has been replaced by routine CGGEV. !> !> CGEGV computes the eigenvalues and, optionally, the left and/or right !> eigenvectors of a complex matrix pair (A,B). !> Given two square matrices A and B, !> the generalized nonsymmetric eigenvalue problem (GNEP) is to find the !> eigenvalues lambda and corresponding (non-zero) eigenvectors x such !> that !> A*x = lambda*B*x. !> !> An alternate form is to find the eigenvalues mu and corresponding !> eigenvectors y such that !> mu*A*y = B*y. !> !> These two forms are equivalent with mu = 1/lambda and x = y if !> neither lambda nor mu is zero. In order to deal with the case that !> lambda or mu is zero or small, two values alpha and beta are returned !> for each eigenvalue, such that lambda = alpha/beta and !> mu = beta/alpha. !> !> The vectors x and y in the above equations are right eigenvectors of !> the matrix pair (A,B). Vectors u and v satisfying !> u**H*A = lambda*u**H*B or mu*v**H*A = v**H*B !> are left eigenvectors of (A,B). !> !> Note: this routine performs on A and B !>
| [in] | JOBVL | !> JOBVL is CHARACTER*1 !> = 'N': do not compute the left generalized eigenvectors; !> = 'V': compute the left generalized eigenvectors (returned !> in VL). !> |
| [in] | JOBVR | !> JOBVR is CHARACTER*1 !> = 'N': do not compute the right generalized eigenvectors; !> = 'V': compute the right generalized eigenvectors (returned !> in VR). !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, VL, and VR. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA, N) !> On entry, the matrix A. !> If JOBVL = 'V' or JOBVR = 'V', then on exit A !> contains the Schur form of A from the generalized Schur !> factorization of the pair (A,B) after balancing. If no !> eigenvectors were computed, then only the diagonal elements !> of the Schur form will be correct. See CGGHRD and CHGEQZ !> for details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of A. LDA >= max(1,N). !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB, N) !> On entry, the matrix B. !> If JOBVL = 'V' or JOBVR = 'V', then on exit B contains the !> upper triangular matrix obtained from B in the generalized !> Schur factorization of the pair (A,B) after balancing. !> If no eigenvectors were computed, then only the diagonal !> elements of B will be correct. See CGGHRD and CHGEQZ for !> details. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of B. LDB >= max(1,N). !> |
| [out] | ALPHA | !> ALPHA is COMPLEX array, dimension (N) !> The complex scalars alpha that define the eigenvalues of !> GNEP. !> |
| [out] | BETA | !> BETA is COMPLEX array, dimension (N) !> The complex 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. !> |
| [out] | VL | !> VL is COMPLEX array, dimension (LDVL,N) !> If JOBVL = 'V', the left eigenvectors u(j) are stored !> in the columns of VL, in the same order as their eigenvalues. !> Each eigenvector is scaled so that its largest component has !> abs(real part) + abs(imag. part) = 1, except for eigenvectors !> corresponding to an eigenvalue with alpha = beta = 0, which !> are set to zero. !> Not referenced if JOBVL = 'N'. !> |
| [in] | LDVL | !> LDVL is INTEGER !> The leading dimension of the matrix VL. LDVL >= 1, and !> if JOBVL = 'V', LDVL >= N. !> |
| [out] | VR | !> VR is COMPLEX array, dimension (LDVR,N) !> If JOBVR = 'V', the right eigenvectors x(j) are stored !> in the columns of VR, in the same order as their eigenvalues. !> Each eigenvector is scaled so that its largest component has !> abs(real part) + abs(imag. part) = 1, except for eigenvectors !> corresponding to an eigenvalue with alpha = beta = 0, which !> are set to zero. !> Not referenced if JOBVR = 'N'. !> |
| [in] | LDVR | !> LDVR is INTEGER !> The leading dimension of the matrix VR. LDVR >= 1, and !> if JOBVR = 'V', LDVR >= N. !> |
| [out] | WORK | !> WORK is COMPLEX 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,2*N). !> For good performance, LWORK must generally be larger. !> To compute the optimal value of LWORK, call ILAENV to get !> blocksizes (for CGEQRF, CUNMQR, and CUNGQR.) Then compute: !> NB -- MAX of the blocksizes for CGEQRF, CUNMQR, and CUNGQR; !> The optimal LWORK is MAX( 2*N, N*(NB+1) ). !> !> 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 REAL array, dimension (8*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 failed. No eigenvectors have been !> calculated, but ALPHA(j) and BETA(j) should be !> correct for j=INFO+1,...,N. !> > N: errors that usually indicate LAPACK problems: !> =N+1: error return from CGGBAL !> =N+2: error return from CGEQRF !> =N+3: error return from CUNMQR !> =N+4: error return from CUNGQR !> =N+5: error return from CGGHRD !> =N+6: error return from CHGEQZ (other than failed !> iteration) !> =N+7: error return from CTGEVC !> =N+8: error return from CGGBAK (computing VL) !> =N+9: error return from CGGBAK (computing VR) !> =N+10: error return from CLASCL (various calls) !> |
!> !> Balancing !> --------- !> !> This driver calls CGGBAL to both permute and scale rows and columns !> of A and B. The permutations PL and PR are chosen so that PL*A*PR !> and PL*B*R will be upper triangular except for the diagonal blocks !> A(i:j,i:j) and B(i:j,i:j), with i and j as close together as !> possible. The diagonal scaling matrices DL and DR are chosen so !> that the pair DL*PL*A*PR*DR, DL*PL*B*PR*DR have elements close to !> one (except for the elements that start out zero.) !> !> After the eigenvalues and eigenvectors of the balanced matrices !> have been computed, CGGBAK transforms the eigenvectors back to what !> they would have been (in perfect arithmetic) if they had not been !> balanced. !> !> Contents of A and B on Exit !> -------- -- - --- - -- ---- !> !> If any eigenvectors are computed (either JOBVL='V' or JOBVR='V' or !> both), then on exit the arrays A and B will contain the complex Schur !> form[*] of the versions of A and B. If no eigenvectors !> are computed, then only the diagonal blocks will be correct. !> !> [*] In other words, upper triangular form. !>
Definition at line 280 of file cgegv.f.
| subroutine cgges | ( | character | jobvsl, |
| character | jobvsr, | ||
| character | sort, | ||
| external | selctg, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | sdim, | ||
| complex, dimension( * ) | alpha, | ||
| complex, dimension( * ) | beta, | ||
| complex, dimension( ldvsl, * ) | vsl, | ||
| integer | ldvsl, | ||
| complex, dimension( ldvsr, * ) | vsr, | ||
| integer | ldvsr, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| logical, dimension( * ) | bwork, | ||
| integer | info ) |
CGGES computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices
Download CGGES + dependencies [TGZ] [ZIP] [TXT]
!> !> CGGES computes for a pair of N-by-N complex nonsymmetric matrices !> (A,B), the generalized eigenvalues, the generalized complex Schur !> form (S, T), and optionally left and/or right Schur vectors (VSL !> and VSR). This gives the generalized Schur factorization !> !> (A,B) = ( (VSL)*S*(VSR)**H, (VSL)*T*(VSR)**H ) !> !> where (VSR)**H is the conjugate-transpose of VSR. !> !> Optionally, it also orders the eigenvalues so that a selected cluster !> of eigenvalues appears in the leading diagonal blocks of the upper !> triangular matrix S and the upper triangular matrix T. The leading !> columns of VSL and VSR then form an unitary basis for the !> corresponding left and right eigenspaces (deflating subspaces). !> !> (If only the generalized eigenvalues are needed, use the driver !> CGGEV instead, which is faster.) !> !> A generalized eigenvalue for a pair of matrices (A,B) is a scalar w !> or a ratio alpha/beta = w, such that A - w*B is singular. It is !> usually represented as the pair (alpha,beta), as there is a !> reasonable interpretation for beta=0, and even for both being zero. !> !> A pair of matrices (S,T) is in generalized complex Schur form if S !> and T are upper triangular and, in addition, the diagonal elements !> of T are non-negative real numbers. !>
| [in] | JOBVSL | !> JOBVSL is CHARACTER*1 !> = 'N': do not compute the left Schur vectors; !> = 'V': compute the left Schur vectors. !> |
| [in] | JOBVSR | !> JOBVSR is CHARACTER*1 !> = 'N': do not compute the right Schur vectors; !> = 'V': compute the right Schur vectors. !> |
| [in] | SORT | !> SORT is CHARACTER*1 !> Specifies whether or not to order the eigenvalues on the !> diagonal of the generalized Schur form. !> = 'N': Eigenvalues are not ordered; !> = 'S': Eigenvalues are ordered (see SELCTG). !> |
| [in] | SELCTG | !> SELCTG is a LOGICAL FUNCTION of two COMPLEX arguments !> SELCTG must be declared EXTERNAL in the calling subroutine. !> If SORT = 'N', SELCTG is not referenced. !> If SORT = 'S', SELCTG is used to select eigenvalues to sort !> to the top left of the Schur form. !> An eigenvalue ALPHA(j)/BETA(j) is selected if !> SELCTG(ALPHA(j),BETA(j)) is true. !> !> Note that a selected complex eigenvalue may no longer satisfy !> SELCTG(ALPHA(j),BETA(j)) = .TRUE. after ordering, since !> ordering may change the value of complex eigenvalues !> (especially if the eigenvalue is ill-conditioned), in this !> case INFO is set to N+2 (See INFO below). !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, VSL, and VSR. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA, N) !> On entry, the first of the pair of matrices. !> On exit, A has been overwritten by its generalized Schur !> form S. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of A. LDA >= max(1,N). !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB, N) !> On entry, the second of the pair of matrices. !> On exit, B has been overwritten by its generalized Schur !> form T. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of B. LDB >= max(1,N). !> |
| [out] | SDIM | !> SDIM is INTEGER !> If SORT = 'N', SDIM = 0. !> If SORT = 'S', SDIM = number of eigenvalues (after sorting) !> for which SELCTG is true. !> |
| [out] | ALPHA | !> ALPHA is COMPLEX array, dimension (N) !> |
| [out] | BETA | !> BETA is COMPLEX array, dimension (N) !> On exit, ALPHA(j)/BETA(j), j=1,...,N, will be the !> generalized eigenvalues. ALPHA(j), j=1,...,N and BETA(j), !> j=1,...,N are the diagonals of the complex Schur form (A,B) !> output by CGGES. The BETA(j) will be non-negative real. !> !> Note: the quotients ALPHA(j)/BETA(j) may easily over- or !> underflow, and BETA(j) may even be zero. Thus, the user !> should avoid naively computing the ratio alpha/beta. !> However, ALPHA will be always less than and usually !> comparable with norm(A) in magnitude, and BETA always less !> than and usually comparable with norm(B). !> |
| [out] | VSL | !> VSL is COMPLEX array, dimension (LDVSL,N) !> If JOBVSL = 'V', VSL will contain the left Schur vectors. !> Not referenced if JOBVSL = 'N'. !> |
| [in] | LDVSL | !> LDVSL is INTEGER !> The leading dimension of the matrix VSL. LDVSL >= 1, and !> if JOBVSL = 'V', LDVSL >= N. !> |
| [out] | VSR | !> VSR is COMPLEX array, dimension (LDVSR,N) !> If JOBVSR = 'V', VSR will contain the right Schur vectors. !> Not referenced if JOBVSR = 'N'. !> |
| [in] | LDVSR | !> LDVSR is INTEGER !> The leading dimension of the matrix VSR. LDVSR >= 1, and !> if JOBVSR = 'V', LDVSR >= N. !> |
| [out] | WORK | !> WORK is COMPLEX 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,2*N). !> For good performance, LWORK must 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] | RWORK | !> RWORK is REAL array, dimension (8*N) !> |
| [out] | BWORK | !> BWORK is LOGICAL array, dimension (N) !> Not referenced if SORT = '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 failed. (A,B) are not in Schur !> form, but ALPHA(j) and BETA(j) should be correct for !> j=INFO+1,...,N. !> > N: =N+1: other than QZ iteration failed in CHGEQZ !> =N+2: after reordering, roundoff changed values of !> some complex eigenvalues so that leading !> eigenvalues in the Generalized Schur form no !> longer satisfy SELCTG=.TRUE. This could also !> be caused due to scaling. !> =N+3: reordering failed in CTGSEN. !> |
Definition at line 267 of file cgges.f.
| subroutine cgges3 | ( | character | jobvsl, |
| character | jobvsr, | ||
| character | sort, | ||
| external | selctg, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | sdim, | ||
| complex, dimension( * ) | alpha, | ||
| complex, dimension( * ) | beta, | ||
| complex, dimension( ldvsl, * ) | vsl, | ||
| integer | ldvsl, | ||
| complex, dimension( ldvsr, * ) | vsr, | ||
| integer | ldvsr, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| logical, dimension( * ) | bwork, | ||
| integer | info ) |
CGGES3 computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices (blocked algorithm)
Download CGGES3 + dependencies [TGZ] [ZIP] [TXT]
!> !> CGGES3 computes for a pair of N-by-N complex nonsymmetric matrices !> (A,B), the generalized eigenvalues, the generalized complex Schur !> form (S, T), and optionally left and/or right Schur vectors (VSL !> and VSR). This gives the generalized Schur factorization !> !> (A,B) = ( (VSL)*S*(VSR)**H, (VSL)*T*(VSR)**H ) !> !> where (VSR)**H is the conjugate-transpose of VSR. !> !> Optionally, it also orders the eigenvalues so that a selected cluster !> of eigenvalues appears in the leading diagonal blocks of the upper !> triangular matrix S and the upper triangular matrix T. The leading !> columns of VSL and VSR then form an unitary basis for the !> corresponding left and right eigenspaces (deflating subspaces). !> !> (If only the generalized eigenvalues are needed, use the driver !> CGGEV instead, which is faster.) !> !> A generalized eigenvalue for a pair of matrices (A,B) is a scalar w !> or a ratio alpha/beta = w, such that A - w*B is singular. It is !> usually represented as the pair (alpha,beta), as there is a !> reasonable interpretation for beta=0, and even for both being zero. !> !> A pair of matrices (S,T) is in generalized complex Schur form if S !> and T are upper triangular and, in addition, the diagonal elements !> of T are non-negative real numbers. !>
| [in] | JOBVSL | !> JOBVSL is CHARACTER*1 !> = 'N': do not compute the left Schur vectors; !> = 'V': compute the left Schur vectors. !> |
| [in] | JOBVSR | !> JOBVSR is CHARACTER*1 !> = 'N': do not compute the right Schur vectors; !> = 'V': compute the right Schur vectors. !> |
| [in] | SORT | !> SORT is CHARACTER*1 !> Specifies whether or not to order the eigenvalues on the !> diagonal of the generalized Schur form. !> = 'N': Eigenvalues are not ordered; !> = 'S': Eigenvalues are ordered (see SELCTG). !> |
| [in] | SELCTG | !> SELCTG is a LOGICAL FUNCTION of two COMPLEX arguments !> SELCTG must be declared EXTERNAL in the calling subroutine. !> If SORT = 'N', SELCTG is not referenced. !> If SORT = 'S', SELCTG is used to select eigenvalues to sort !> to the top left of the Schur form. !> An eigenvalue ALPHA(j)/BETA(j) is selected if !> SELCTG(ALPHA(j),BETA(j)) is true. !> !> Note that a selected complex eigenvalue may no longer satisfy !> SELCTG(ALPHA(j),BETA(j)) = .TRUE. after ordering, since !> ordering may change the value of complex eigenvalues !> (especially if the eigenvalue is ill-conditioned), in this !> case INFO is set to N+2 (See INFO below). !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, VSL, and VSR. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA, N) !> On entry, the first of the pair of matrices. !> On exit, A has been overwritten by its generalized Schur !> form S. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of A. LDA >= max(1,N). !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB, N) !> On entry, the second of the pair of matrices. !> On exit, B has been overwritten by its generalized Schur !> form T. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of B. LDB >= max(1,N). !> |
| [out] | SDIM | !> SDIM is INTEGER !> If SORT = 'N', SDIM = 0. !> If SORT = 'S', SDIM = number of eigenvalues (after sorting) !> for which SELCTG is true. !> |
| [out] | ALPHA | !> ALPHA is COMPLEX array, dimension (N) !> |
| [out] | BETA | !> BETA is COMPLEX array, dimension (N) !> On exit, ALPHA(j)/BETA(j), j=1,...,N, will be the !> generalized eigenvalues. ALPHA(j), j=1,...,N and BETA(j), !> j=1,...,N are the diagonals of the complex Schur form (A,B) !> output by CGGES3. The BETA(j) will be non-negative real. !> !> Note: the quotients ALPHA(j)/BETA(j) may easily over- or !> underflow, and BETA(j) may even be zero. Thus, the user !> should avoid naively computing the ratio alpha/beta. !> However, ALPHA will be always less than and usually !> comparable with norm(A) in magnitude, and BETA always less !> than and usually comparable with norm(B). !> |
| [out] | VSL | !> VSL is COMPLEX array, dimension (LDVSL,N) !> If JOBVSL = 'V', VSL will contain the left Schur vectors. !> Not referenced if JOBVSL = 'N'. !> |
| [in] | LDVSL | !> LDVSL is INTEGER !> The leading dimension of the matrix VSL. LDVSL >= 1, and !> if JOBVSL = 'V', LDVSL >= N. !> |
| [out] | VSR | !> VSR is COMPLEX array, dimension (LDVSR,N) !> If JOBVSR = 'V', VSR will contain the right Schur vectors. !> Not referenced if JOBVSR = 'N'. !> |
| [in] | LDVSR | !> LDVSR is INTEGER !> The leading dimension of the matrix VSR. LDVSR >= 1, and !> if JOBVSR = 'V', LDVSR >= N. !> |
| [out] | WORK | !> WORK is COMPLEX 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. !> !> 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 REAL array, dimension (8*N) !> |
| [out] | BWORK | !> BWORK is LOGICAL array, dimension (N) !> Not referenced if SORT = '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 failed. (A,B) are not in Schur !> form, but ALPHA(j) and BETA(j) should be correct for !> j=INFO+1,...,N. !> > N: =N+1: other than QZ iteration failed in CLAQZ0 !> =N+2: after reordering, roundoff changed values of !> some complex eigenvalues so that leading !> eigenvalues in the Generalized Schur form no !> longer satisfy SELCTG=.TRUE. This could also !> be caused due to scaling. !> =N+3: reordering failed in CTGSEN. !> |
Definition at line 266 of file cgges3.f.
| subroutine cggesx | ( | character | jobvsl, |
| character | jobvsr, | ||
| character | sort, | ||
| external | selctg, | ||
| character | sense, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | sdim, | ||
| complex, dimension( * ) | alpha, | ||
| complex, dimension( * ) | beta, | ||
| complex, dimension( ldvsl, * ) | vsl, | ||
| integer | ldvsl, | ||
| complex, dimension( ldvsr, * ) | vsr, | ||
| integer | ldvsr, | ||
| real, dimension( 2 ) | rconde, | ||
| real, dimension( 2 ) | rcondv, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| logical, dimension( * ) | bwork, | ||
| integer | info ) |
CGGESX computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices
Download CGGESX + dependencies [TGZ] [ZIP] [TXT]
!> !> CGGESX computes for a pair of N-by-N complex nonsymmetric matrices !> (A,B), the generalized eigenvalues, the complex Schur form (S,T), !> and, optionally, the left and/or right matrices of Schur vectors (VSL !> and VSR). This gives the generalized Schur factorization !> !> (A,B) = ( (VSL) S (VSR)**H, (VSL) T (VSR)**H ) !> !> where (VSR)**H is the conjugate-transpose of VSR. !> !> Optionally, it also orders the eigenvalues so that a selected cluster !> of eigenvalues appears in the leading diagonal blocks of the upper !> triangular matrix S and the upper triangular matrix T; computes !> a reciprocal condition number for the average of the selected !> eigenvalues (RCONDE); and computes a reciprocal condition number for !> the right and left deflating subspaces corresponding to the selected !> eigenvalues (RCONDV). The leading columns of VSL and VSR then form !> an orthonormal basis for the corresponding left and right eigenspaces !> (deflating subspaces). !> !> A generalized eigenvalue for a pair of matrices (A,B) is a scalar w !> or a ratio alpha/beta = w, such that A - w*B is singular. It is !> usually represented as the pair (alpha,beta), as there is a !> reasonable interpretation for beta=0 or for both being zero. !> !> A pair of matrices (S,T) is in generalized complex Schur form if T is !> upper triangular with non-negative diagonal and S is upper !> triangular. !>
| [in] | JOBVSL | !> JOBVSL is CHARACTER*1 !> = 'N': do not compute the left Schur vectors; !> = 'V': compute the left Schur vectors. !> |
| [in] | JOBVSR | !> JOBVSR is CHARACTER*1 !> = 'N': do not compute the right Schur vectors; !> = 'V': compute the right Schur vectors. !> |
| [in] | SORT | !> SORT is CHARACTER*1 !> Specifies whether or not to order the eigenvalues on the !> diagonal of the generalized Schur form. !> = 'N': Eigenvalues are not ordered; !> = 'S': Eigenvalues are ordered (see SELCTG). !> |
| [in] | SELCTG | !> SELCTG is a LOGICAL FUNCTION of two COMPLEX arguments !> SELCTG must be declared EXTERNAL in the calling subroutine. !> If SORT = 'N', SELCTG is not referenced. !> If SORT = 'S', SELCTG is used to select eigenvalues to sort !> to the top left of the Schur form. !> Note that a selected complex eigenvalue may no longer satisfy !> SELCTG(ALPHA(j),BETA(j)) = .TRUE. after ordering, since !> ordering may change the value of complex eigenvalues !> (especially if the eigenvalue is ill-conditioned), in this !> case INFO is set to N+3 see INFO below). !> |
| [in] | SENSE | !> SENSE is CHARACTER*1 !> Determines which reciprocal condition numbers are computed. !> = 'N': None are computed; !> = 'E': Computed for average of selected eigenvalues only; !> = 'V': Computed for selected deflating subspaces only; !> = 'B': Computed for both. !> If SENSE = 'E', 'V', or 'B', SORT must equal 'S'. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, VSL, and VSR. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA, N) !> On entry, the first of the pair of matrices. !> On exit, A has been overwritten by its generalized Schur !> form S. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of A. LDA >= max(1,N). !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB, N) !> On entry, the second of the pair of matrices. !> On exit, B has been overwritten by its generalized Schur !> form T. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of B. LDB >= max(1,N). !> |
| [out] | SDIM | !> SDIM is INTEGER !> If SORT = 'N', SDIM = 0. !> If SORT = 'S', SDIM = number of eigenvalues (after sorting) !> for which SELCTG is true. !> |
| [out] | ALPHA | !> ALPHA is COMPLEX array, dimension (N) !> |
| [out] | BETA | !> BETA is COMPLEX array, dimension (N) !> On exit, ALPHA(j)/BETA(j), j=1,...,N, will be the !> generalized eigenvalues. ALPHA(j) and BETA(j),j=1,...,N are !> the diagonals of the complex Schur form (S,T). BETA(j) will !> be non-negative real. !> !> Note: the quotients ALPHA(j)/BETA(j) may easily over- or !> underflow, and BETA(j) may even be zero. Thus, the user !> should avoid naively computing the ratio alpha/beta. !> However, ALPHA will be always less than and usually !> comparable with norm(A) in magnitude, and BETA always less !> than and usually comparable with norm(B). !> |
| [out] | VSL | !> VSL is COMPLEX array, dimension (LDVSL,N) !> If JOBVSL = 'V', VSL will contain the left Schur vectors. !> Not referenced if JOBVSL = 'N'. !> |
| [in] | LDVSL | !> LDVSL is INTEGER !> The leading dimension of the matrix VSL. LDVSL >=1, and !> if JOBVSL = 'V', LDVSL >= N. !> |
| [out] | VSR | !> VSR is COMPLEX array, dimension (LDVSR,N) !> If JOBVSR = 'V', VSR will contain the right Schur vectors. !> Not referenced if JOBVSR = 'N'. !> |
| [in] | LDVSR | !> LDVSR is INTEGER !> The leading dimension of the matrix VSR. LDVSR >= 1, and !> if JOBVSR = 'V', LDVSR >= N. !> |
| [out] | RCONDE | !> RCONDE is REAL array, dimension ( 2 ) !> If SENSE = 'E' or 'B', RCONDE(1) and RCONDE(2) contain the !> reciprocal condition numbers for the average of the selected !> eigenvalues. !> Not referenced if SENSE = 'N' or 'V'. !> |
| [out] | RCONDV | !> RCONDV is REAL array, dimension ( 2 ) !> If SENSE = 'V' or 'B', RCONDV(1) and RCONDV(2) contain the !> reciprocal condition number for the selected deflating !> subspaces. !> Not referenced if SENSE = 'N' or 'E'. !> |
| [out] | WORK | !> WORK is COMPLEX 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. !> If N = 0, LWORK >= 1, else if SENSE = 'E', 'V', or 'B', !> LWORK >= MAX(1,2*N,2*SDIM*(N-SDIM)), else !> LWORK >= MAX(1,2*N). Note that 2*SDIM*(N-SDIM) <= N*N/2. !> Note also that an error is only returned if !> LWORK < MAX(1,2*N), but if SENSE = 'E' or 'V' or 'B' this may !> not be large enough. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the bound on the optimal size of the WORK !> array and the minimum size of the IWORK array, returns these !> values as the first entries of the WORK and IWORK arrays, and !> no error message related to LWORK or LIWORK is issued by !> XERBLA. !> |
| [out] | RWORK | !> RWORK is REAL array, dimension ( 8*N ) !> Real workspace. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (MAX(1,LIWORK)) !> On exit, if INFO = 0, IWORK(1) returns the minimum LIWORK. !> |
| [in] | LIWORK | !> LIWORK is INTEGER !> The dimension of the array WORK. !> If SENSE = 'N' or N = 0, LIWORK >= 1, otherwise !> LIWORK >= N+2. !> !> If LIWORK = -1, then a workspace query is assumed; the !> routine only calculates the bound on the optimal size of the !> WORK array and the minimum size of the IWORK array, returns !> these values as the first entries of the WORK and IWORK !> arrays, and no error message related to LWORK or LIWORK is !> issued by XERBLA. !> |
| [out] | BWORK | !> BWORK is LOGICAL array, dimension (N) !> Not referenced if SORT = '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 failed. (A,B) are not in Schur !> form, but ALPHA(j) and BETA(j) should be correct for !> j=INFO+1,...,N. !> > N: =N+1: other than QZ iteration failed in CHGEQZ !> =N+2: after reordering, roundoff changed values of !> some complex eigenvalues so that leading !> eigenvalues in the Generalized Schur form no !> longer satisfy SELCTG=.TRUE. This could also !> be caused due to scaling. !> =N+3: reordering failed in CTGSEN. !> |
Definition at line 326 of file cggesx.f.
| subroutine cggev | ( | character | jobvl, |
| character | jobvr, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( * ) | alpha, | ||
| complex, dimension( * ) | beta, | ||
| complex, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| complex, dimension( ldvr, * ) | vr, | ||
| integer | ldvr, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CGGEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Download CGGEV + dependencies [TGZ] [ZIP] [TXT]
!> !> CGGEV computes for a pair of N-by-N complex nonsymmetric matrices !> (A,B), the generalized eigenvalues, and optionally, the left and/or !> right generalized eigenvectors. !> !> A generalized eigenvalue for a pair of matrices (A,B) is a scalar !> lambda or a ratio alpha/beta = lambda, such that A - lambda*B is !> singular. It is usually represented as the pair (alpha,beta), as !> there is a reasonable interpretation for beta=0, and even for both !> being zero. !> !> The right generalized eigenvector v(j) corresponding to the !> generalized eigenvalue lambda(j) of (A,B) satisfies !> !> A * v(j) = lambda(j) * B * v(j). !> !> The left generalized eigenvector u(j) corresponding to the !> generalized eigenvalues lambda(j) of (A,B) satisfies !> !> u(j)**H * A = lambda(j) * u(j)**H * B !> !> where u(j)**H is the conjugate-transpose of u(j). !>
| [in] | JOBVL | !> JOBVL is CHARACTER*1 !> = 'N': do not compute the left generalized eigenvectors; !> = 'V': compute the left generalized eigenvectors. !> |
| [in] | JOBVR | !> JOBVR is CHARACTER*1 !> = 'N': do not compute the right generalized eigenvectors; !> = 'V': compute the right generalized eigenvectors. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, VL, and VR. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA, N) !> On entry, the matrix A in the pair (A,B). !> On exit, A has been overwritten. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of A. LDA >= max(1,N). !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB, N) !> On entry, the matrix B in the pair (A,B). !> On exit, B has been overwritten. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of B. LDB >= max(1,N). !> |
| [out] | ALPHA | !> ALPHA is COMPLEX array, dimension (N) !> |
| [out] | BETA | !> BETA is COMPLEX array, dimension (N) !> On exit, ALPHA(j)/BETA(j), j=1,...,N, will be the !> generalized eigenvalues. !> !> Note: the quotients ALPHA(j)/BETA(j) may easily over- or !> underflow, and BETA(j) may even be zero. Thus, the user !> should avoid naively computing the ratio alpha/beta. !> However, ALPHA will be always less than and usually !> comparable with norm(A) in magnitude, and BETA always less !> than and usually comparable with norm(B). !> |
| [out] | VL | !> VL is COMPLEX array, dimension (LDVL,N) !> If JOBVL = 'V', the left generalized eigenvectors u(j) are !> stored one after another in the columns of VL, in the same !> order as their eigenvalues. !> Each eigenvector is scaled so the largest component has !> abs(real part) + abs(imag. part) = 1. !> Not referenced if JOBVL = 'N'. !> |
| [in] | LDVL | !> LDVL is INTEGER !> The leading dimension of the matrix VL. LDVL >= 1, and !> if JOBVL = 'V', LDVL >= N. !> |
| [out] | VR | !> VR is COMPLEX array, dimension (LDVR,N) !> If JOBVR = 'V', the right generalized eigenvectors v(j) are !> stored one after another in the columns of VR, in the same !> order as their eigenvalues. !> Each eigenvector is scaled so the largest component has !> abs(real part) + abs(imag. part) = 1. !> Not referenced if JOBVR = 'N'. !> |
| [in] | LDVR | !> LDVR is INTEGER !> The leading dimension of the matrix VR. LDVR >= 1, and !> if JOBVR = 'V', LDVR >= N. !> |
| [out] | WORK | !> WORK is COMPLEX 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,2*N). !> For good performance, LWORK must 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] | RWORK | !> RWORK is REAL array, dimension (8*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 failed. No eigenvectors have been !> calculated, but ALPHA(j) and BETA(j) should be !> correct for j=INFO+1,...,N. !> > N: =N+1: other then QZ iteration failed in CHGEQZ, !> =N+2: error return from CTGEVC. !> |
Definition at line 215 of file cggev.f.
| subroutine cggev3 | ( | character | jobvl, |
| character | jobvr, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( * ) | alpha, | ||
| complex, dimension( * ) | beta, | ||
| complex, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| complex, dimension( ldvr, * ) | vr, | ||
| integer | ldvr, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CGGEV3 computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices (blocked algorithm)
Download CGGEV3 + dependencies [TGZ] [ZIP] [TXT]
!> !> CGGEV3 computes for a pair of N-by-N complex nonsymmetric matrices !> (A,B), the generalized eigenvalues, and optionally, the left and/or !> right generalized eigenvectors. !> !> A generalized eigenvalue for a pair of matrices (A,B) is a scalar !> lambda or a ratio alpha/beta = lambda, such that A - lambda*B is !> singular. It is usually represented as the pair (alpha,beta), as !> there is a reasonable interpretation for beta=0, and even for both !> being zero. !> !> The right generalized eigenvector v(j) corresponding to the !> generalized eigenvalue lambda(j) of (A,B) satisfies !> !> A * v(j) = lambda(j) * B * v(j). !> !> The left generalized eigenvector u(j) corresponding to the !> generalized eigenvalues lambda(j) of (A,B) satisfies !> !> u(j)**H * A = lambda(j) * u(j)**H * B !> !> where u(j)**H is the conjugate-transpose of u(j). !>
| [in] | JOBVL | !> JOBVL is CHARACTER*1 !> = 'N': do not compute the left generalized eigenvectors; !> = 'V': compute the left generalized eigenvectors. !> |
| [in] | JOBVR | !> JOBVR is CHARACTER*1 !> = 'N': do not compute the right generalized eigenvectors; !> = 'V': compute the right generalized eigenvectors. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, VL, and VR. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA, N) !> On entry, the matrix A in the pair (A,B). !> On exit, A has been overwritten. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of A. LDA >= max(1,N). !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB, N) !> On entry, the matrix B in the pair (A,B). !> On exit, B has been overwritten. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of B. LDB >= max(1,N). !> |
| [out] | ALPHA | !> ALPHA is COMPLEX array, dimension (N) !> |
| [out] | BETA | !> BETA is COMPLEX array, dimension (N) !> On exit, ALPHA(j)/BETA(j), j=1,...,N, will be the !> generalized eigenvalues. !> !> Note: the quotients ALPHA(j)/BETA(j) may easily over- or !> underflow, and BETA(j) may even be zero. Thus, the user !> should avoid naively computing the ratio alpha/beta. !> However, ALPHA will be always less than and usually !> comparable with norm(A) in magnitude, and BETA always less !> than and usually comparable with norm(B). !> |
| [out] | VL | !> VL is COMPLEX array, dimension (LDVL,N) !> If JOBVL = 'V', the left generalized eigenvectors u(j) are !> stored one after another in the columns of VL, in the same !> order as their eigenvalues. !> Each eigenvector is scaled so the largest component has !> abs(real part) + abs(imag. part) = 1. !> Not referenced if JOBVL = 'N'. !> |
| [in] | LDVL | !> LDVL is INTEGER !> The leading dimension of the matrix VL. LDVL >= 1, and !> if JOBVL = 'V', LDVL >= N. !> |
| [out] | VR | !> VR is COMPLEX array, dimension (LDVR,N) !> If JOBVR = 'V', the right generalized eigenvectors v(j) are !> stored one after another in the columns of VR, in the same !> order as their eigenvalues. !> Each eigenvector is scaled so the largest component has !> abs(real part) + abs(imag. part) = 1. !> Not referenced if JOBVR = 'N'. !> |
| [in] | LDVR | !> LDVR is INTEGER !> The leading dimension of the matrix VR. LDVR >= 1, and !> if JOBVR = 'V', LDVR >= N. !> |
| [out] | WORK | !> WORK is COMPLEX 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. !> !> 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 REAL array, dimension (8*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 failed. No eigenvectors have been !> calculated, but ALPHA(j) and BETA(j) should be !> correct for j=INFO+1,...,N. !> > N: =N+1: other then QZ iteration failed in CHGEQZ, !> =N+2: error return from CTGEVC. !> |
Definition at line 214 of file cggev3.f.
| subroutine cggevx | ( | character | balanc, |
| character | jobvl, | ||
| character | jobvr, | ||
| character | sense, | ||
| integer | n, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( * ) | alpha, | ||
| complex, dimension( * ) | beta, | ||
| complex, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| complex, dimension( ldvr, * ) | vr, | ||
| integer | ldvr, | ||
| integer | ilo, | ||
| integer | ihi, | ||
| real, dimension( * ) | lscale, | ||
| real, dimension( * ) | rscale, | ||
| real | abnrm, | ||
| real | bbnrm, | ||
| real, dimension( * ) | rconde, | ||
| real, dimension( * ) | rcondv, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| integer, dimension( * ) | iwork, | ||
| logical, dimension( * ) | bwork, | ||
| integer | info ) |
CGGEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Download CGGEVX + dependencies [TGZ] [ZIP] [TXT]
!> !> CGGEVX computes for a pair of N-by-N complex nonsymmetric matrices !> (A,B) the generalized eigenvalues, and optionally, the left and/or !> right generalized eigenvectors. !> !> Optionally, it also computes a balancing transformation to improve !> the conditioning of the eigenvalues and eigenvectors (ILO, IHI, !> LSCALE, RSCALE, ABNRM, and BBNRM), reciprocal condition numbers for !> the eigenvalues (RCONDE), and reciprocal condition numbers for the !> right eigenvectors (RCONDV). !> !> A generalized eigenvalue for a pair of matrices (A,B) is a scalar !> lambda or a ratio alpha/beta = lambda, such that A - lambda*B is !> singular. It is usually represented as the pair (alpha,beta), as !> there is a reasonable interpretation for beta=0, and even for both !> being zero. !> !> The right eigenvector v(j) corresponding to the eigenvalue lambda(j) !> of (A,B) satisfies !> A * v(j) = lambda(j) * B * v(j) . !> The left eigenvector u(j) corresponding to the eigenvalue lambda(j) !> of (A,B) satisfies !> u(j)**H * A = lambda(j) * u(j)**H * B. !> where u(j)**H is the conjugate-transpose of u(j). !> !>
| [in] | BALANC | !> BALANC is CHARACTER*1 !> Specifies the balance option to be performed: !> = 'N': do not diagonally scale or permute; !> = 'P': permute only; !> = 'S': scale only; !> = 'B': both permute and scale. !> Computed reciprocal condition numbers will be for the !> matrices after permuting and/or balancing. Permuting does !> not change condition numbers (in exact arithmetic), but !> balancing does. !> |
| [in] | JOBVL | !> JOBVL is CHARACTER*1 !> = 'N': do not compute the left generalized eigenvectors; !> = 'V': compute the left generalized eigenvectors. !> |
| [in] | JOBVR | !> JOBVR is CHARACTER*1 !> = 'N': do not compute the right generalized eigenvectors; !> = 'V': compute the right generalized eigenvectors. !> |
| [in] | SENSE | !> SENSE is CHARACTER*1 !> Determines which reciprocal condition numbers are computed. !> = 'N': none are computed; !> = 'E': computed for eigenvalues only; !> = 'V': computed for eigenvectors only; !> = 'B': computed for eigenvalues and eigenvectors. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, VL, and VR. N >= 0. !> |
| [in,out] | A | !> A is COMPLEX array, dimension (LDA, N) !> On entry, the matrix A in the pair (A,B). !> On exit, A has been overwritten. If JOBVL='V' or JOBVR='V' !> or both, then A contains the first part of the complex Schur !> form of the versions of the input A and B. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of A. LDA >= max(1,N). !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB, N) !> On entry, the matrix B in the pair (A,B). !> On exit, B has been overwritten. If JOBVL='V' or JOBVR='V' !> or both, then B contains the second part of the complex !> Schur form of the versions of the input A and B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of B. LDB >= max(1,N). !> |
| [out] | ALPHA | !> ALPHA is COMPLEX array, dimension (N) !> |
| [out] | BETA | !> BETA is COMPLEX array, dimension (N) !> On exit, ALPHA(j)/BETA(j), j=1,...,N, will be the generalized !> eigenvalues. !> !> Note: the quotient ALPHA(j)/BETA(j) ) may easily over- or !> underflow, and BETA(j) may even be zero. Thus, the user !> should avoid naively computing the ratio ALPHA/BETA. !> However, ALPHA will be always less than and usually !> comparable with norm(A) in magnitude, and BETA always less !> than and usually comparable with norm(B). !> |
| [out] | VL | !> VL is COMPLEX array, dimension (LDVL,N) !> If JOBVL = 'V', the left generalized eigenvectors u(j) are !> stored one after another in the columns of VL, in the same !> order as their eigenvalues. !> Each eigenvector will be scaled so the largest component !> will have abs(real part) + abs(imag. part) = 1. !> Not referenced if JOBVL = 'N'. !> |
| [in] | LDVL | !> LDVL is INTEGER !> The leading dimension of the matrix VL. LDVL >= 1, and !> if JOBVL = 'V', LDVL >= N. !> |
| [out] | VR | !> VR is COMPLEX array, dimension (LDVR,N) !> If JOBVR = 'V', the right generalized eigenvectors v(j) are !> stored one after another in the columns of VR, in the same !> order as their eigenvalues. !> Each eigenvector will be scaled so the largest component !> will have abs(real part) + abs(imag. part) = 1. !> Not referenced if JOBVR = 'N'. !> |
| [in] | LDVR | !> LDVR is INTEGER !> The leading dimension of the matrix VR. LDVR >= 1, and !> if JOBVR = 'V', LDVR >= N. !> |
| [out] | ILO | !> ILO is INTEGER !> |
| [out] | IHI | !> IHI is INTEGER !> ILO and IHI are integer values such that on exit !> A(i,j) = 0 and B(i,j) = 0 if i > j and !> j = 1,...,ILO-1 or i = IHI+1,...,N. !> If BALANC = 'N' or 'S', ILO = 1 and IHI = N. !> |
| [out] | LSCALE | !> LSCALE is REAL array, dimension (N) !> Details of the permutations and scaling factors applied !> to the left side of A and B. If PL(j) is the index of the !> row interchanged with row j, and DL(j) is the scaling !> factor applied to row j, then !> LSCALE(j) = PL(j) for j = 1,...,ILO-1 !> = DL(j) for j = ILO,...,IHI !> = PL(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] | RSCALE | !> RSCALE is REAL array, dimension (N) !> Details of the permutations and scaling factors applied !> to the right side of A and B. If PR(j) is the index of the !> column interchanged with column j, and DR(j) is the scaling !> factor applied to column j, then !> RSCALE(j) = PR(j) for j = 1,...,ILO-1 !> = DR(j) for j = ILO,...,IHI !> = PR(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] | ABNRM | !> ABNRM is REAL !> The one-norm of the balanced matrix A. !> |
| [out] | BBNRM | !> BBNRM is REAL !> The one-norm of the balanced matrix B. !> |
| [out] | RCONDE | !> RCONDE is REAL array, dimension (N) !> If SENSE = 'E' or 'B', the reciprocal condition numbers of !> the eigenvalues, stored in consecutive elements of the array. !> If SENSE = 'N' or 'V', RCONDE is not referenced. !> |
| [out] | RCONDV | !> RCONDV is REAL array, dimension (N) !> If SENSE = 'V' or 'B', the estimated reciprocal condition !> numbers of the eigenvectors, stored in consecutive elements !> of the array. If the eigenvalues cannot be reordered to !> compute RCONDV(j), RCONDV(j) is set to 0; this can only occur !> when the true value would be very small anyway. !> If SENSE = 'N' or 'E', RCONDV is not referenced. !> |
| [out] | WORK | !> WORK is COMPLEX 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,2*N). !> If SENSE = 'E', LWORK >= max(1,4*N). !> If SENSE = 'V' or 'B', LWORK >= max(1,2*N*N+2*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 REAL array, dimension (lrwork) !> lrwork must be at least max(1,6*N) if BALANC = 'S' or 'B', !> and at least max(1,2*N) otherwise. !> Real workspace. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (N+2) !> If SENSE = 'E', IWORK is not referenced. !> |
| [out] | BWORK | !> BWORK is LOGICAL array, dimension (N) !> If SENSE = 'N', BWORK is not referenced. !> |
| [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 failed. No eigenvectors have been !> calculated, but ALPHA(j) and BETA(j) should be correct !> for j=INFO+1,...,N. !> > N: =N+1: other than QZ iteration failed in CHGEQZ. !> =N+2: error return from CTGEVC. !> |
!> !> Balancing a matrix pair (A,B) includes, first, permuting rows and !> columns to isolate eigenvalues, second, applying diagonal similarity !> transformation to the rows and columns to make the rows and columns !> as close in norm as possible. The computed reciprocal condition !> numbers correspond to the balanced matrix. Permuting rows and columns !> will not change the condition numbers (in exact arithmetic) but !> diagonal scaling will. For further explanation of balancing, see !> section 4.11.1.2 of LAPACK Users' Guide. !> !> An approximate error bound on the chordal distance between the i-th !> computed generalized eigenvalue w and the corresponding exact !> eigenvalue lambda is !> !> chord(w, lambda) <= EPS * norm(ABNRM, BBNRM) / RCONDE(I) !> !> An approximate error bound for the angle between the i-th computed !> eigenvector VL(i) or VR(i) is given by !> !> EPS * norm(ABNRM, BBNRM) / DIF(i). !> !> For further explanation of the reciprocal condition numbers RCONDE !> and RCONDV, see section 4.11 of LAPACK User's Guide. !>
Definition at line 370 of file cggevx.f.