Functions | |
| subroutine | sgegs (jobvsl, jobvsr, n, a, lda, b, ldb, alphar, alphai, beta, vsl, ldvsl, vsr, ldvsr, work, lwork, info) |
| SGEGS computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices | |
| subroutine | sgegv (jobvl, jobvr, n, a, lda, b, ldb, alphar, alphai, beta, vl, ldvl, vr, ldvr, work, lwork, info) |
| SGEEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices | |
| subroutine | sgees (jobvs, sort, select, n, a, lda, sdim, wr, wi, vs, ldvs, work, lwork, bwork, info) |
| SGEES computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices | |
| subroutine | sgeesx (jobvs, sort, select, sense, n, a, lda, sdim, wr, wi, vs, ldvs, rconde, rcondv, work, lwork, iwork, liwork, bwork, info) |
| SGEESX computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices | |
| subroutine | sgeev (jobvl, jobvr, n, a, lda, wr, wi, vl, ldvl, vr, ldvr, work, lwork, info) |
| SGEEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices | |
| subroutine | sgeevx (balanc, jobvl, jobvr, sense, n, a, lda, wr, wi, vl, ldvl, vr, ldvr, ilo, ihi, scale, abnrm, rconde, rcondv, work, lwork, iwork, info) |
| SGEEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices | |
| subroutine | sgges (jobvsl, jobvsr, sort, selctg, n, a, lda, b, ldb, sdim, alphar, alphai, beta, vsl, ldvsl, vsr, ldvsr, work, lwork, bwork, info) |
| SGGES computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices | |
| subroutine | sgges3 (jobvsl, jobvsr, sort, selctg, n, a, lda, b, ldb, sdim, alphar, alphai, beta, vsl, ldvsl, vsr, ldvsr, work, lwork, bwork, info) |
| SGGES3 computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices (blocked algorithm) | |
| subroutine | sggesx (jobvsl, jobvsr, sort, selctg, sense, n, a, lda, b, ldb, sdim, alphar, alphai, beta, vsl, ldvsl, vsr, ldvsr, rconde, rcondv, work, lwork, iwork, liwork, bwork, info) |
| SGGESX computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices | |
| subroutine | sggev (jobvl, jobvr, n, a, lda, b, ldb, alphar, alphai, beta, vl, ldvl, vr, ldvr, work, lwork, info) |
| SGGEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices | |
| subroutine | sggev3 (jobvl, jobvr, n, a, lda, b, ldb, alphar, alphai, beta, vl, ldvl, vr, ldvr, work, lwork, info) |
| SGGEV3 computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices (blocked algorithm) | |
| subroutine | sggevx (balanc, jobvl, jobvr, sense, n, a, lda, b, ldb, alphar, alphai, beta, vl, ldvl, vr, ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv, work, lwork, iwork, bwork, info) |
| SGGEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices | |
This is the group of real eigenvalue driver functions for GE matrices
| subroutine sgees | ( | character | jobvs, |
| character | sort, | ||
| external | select, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer | sdim, | ||
| real, dimension( * ) | wr, | ||
| real, dimension( * ) | wi, | ||
| real, dimension( ldvs, * ) | vs, | ||
| integer | ldvs, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| logical, dimension( * ) | bwork, | ||
| integer | info ) |
SGEES computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices
Download SGEES + dependencies [TGZ] [ZIP] [TXT]
!> !> SGEES computes for an N-by-N real nonsymmetric matrix A, the !> eigenvalues, the real Schur form T, and, optionally, the matrix of !> Schur vectors Z. This gives the Schur factorization A = Z*T*(Z**T). !> !> Optionally, it also orders the eigenvalues on the diagonal of the !> real 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 matrix is in real Schur form if it is upper quasi-triangular with !> 1-by-1 and 2-by-2 blocks. 2-by-2 blocks will be standardized in the !> form !> [ a b ] !> [ c a ] !> !> where b*c < 0. The eigenvalues of such a block are a +- sqrt(bc). !>
| [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 two REAL arguments !> SELECT must be declared EXTERNAL in the calling subroutine. !> If SORT = 'S', SELECT is used to select eigenvalues to sort !> to the top left of the Schur form. !> If SORT = 'N', SELECT is not referenced. !> An eigenvalue WR(j)+sqrt(-1)*WI(j) is selected if !> SELECT(WR(j),WI(j)) is true; i.e., if either one of a complex !> conjugate pair of eigenvalues is selected, then both complex !> eigenvalues are selected. !> Note that a selected complex eigenvalue may no longer !> satisfy SELECT(WR(j),WI(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 matrix A. N >= 0. !> |
| [in,out] | A | !> A is REAL array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> On exit, A has been overwritten by its real 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 (after sorting) !> for which SELECT is true. (Complex conjugate !> pairs for which SELECT is true for either !> eigenvalue count as 2.) !> |
| [out] | WR | !> WR is REAL array, dimension (N) !> |
| [out] | WI | !> WI is REAL array, dimension (N) !> WR and WI contain the real and imaginary parts, !> respectively, of the computed eigenvalues in the same order !> that they appear on the diagonal of the output Schur form T. !> Complex conjugate pairs of eigenvalues will appear !> consecutively with the eigenvalue having the positive !> imaginary part first. !> |
| [out] | VS | !> VS is REAL array, dimension (LDVS,N) !> If JOBVS = 'V', VS contains the orthogonal 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 REAL array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) contains the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= max(1,3*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] | 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 WR and WI !> 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 214 of file sgees.f.
| subroutine sgeesx | ( | character | jobvs, |
| character | sort, | ||
| external | select, | ||
| character | sense, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer | sdim, | ||
| real, dimension( * ) | wr, | ||
| real, dimension( * ) | wi, | ||
| real, dimension( ldvs, * ) | vs, | ||
| integer | ldvs, | ||
| real | rconde, | ||
| real | rcondv, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| logical, dimension( * ) | bwork, | ||
| integer | info ) |
SGEESX computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices
Download SGEESX + dependencies [TGZ] [ZIP] [TXT]
!> !> SGEESX computes for an N-by-N real nonsymmetric matrix A, the !> eigenvalues, the real Schur form T, and, optionally, the matrix of !> Schur vectors Z. This gives the Schur factorization A = Z*T*(Z**T). !> !> Optionally, it also orders the eigenvalues on the diagonal of the !> real 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 real matrix is in real Schur form if it is upper quasi-triangular !> with 1-by-1 and 2-by-2 blocks. 2-by-2 blocks will be standardized in !> the form !> [ a b ] !> [ c a ] !> !> where b*c < 0. The eigenvalues of such a block are a +- sqrt(bc). !>
| [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 two REAL arguments !> SELECT must be declared EXTERNAL in the calling subroutine. !> If SORT = 'S', SELECT is used to select eigenvalues to sort !> to the top left of the Schur form. !> If SORT = 'N', SELECT is not referenced. !> An eigenvalue WR(j)+sqrt(-1)*WI(j) is selected if !> SELECT(WR(j),WI(j)) is true; i.e., if either one of a !> complex conjugate pair of eigenvalues is selected, then both !> are. Note that a selected complex eigenvalue may no longer !> satisfy SELECT(WR(j),WI(j)) = .TRUE. after ordering, since !> ordering may change the value of complex eigenvalues !> (especially if the eigenvalue is ill-conditioned); in this !> case INFO may be 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 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 REAL array, dimension (LDA, N) !> On entry, the N-by-N matrix A. !> On exit, A is overwritten by its real 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 (after sorting) !> for which SELECT is true. (Complex conjugate !> pairs for which SELECT is true for either !> eigenvalue count as 2.) !> |
| [out] | WR | !> WR is REAL array, dimension (N) !> |
| [out] | WI | !> WI is REAL array, dimension (N) !> WR and WI contain the real and imaginary parts, respectively, !> of the computed eigenvalues, in the same order that they !> appear on the diagonal of the output Schur form T. Complex !> conjugate pairs of eigenvalues appear consecutively with the !> eigenvalue having the positive imaginary part first. !> |
| [out] | VS | !> VS is REAL array, dimension (LDVS,N) !> If JOBVS = 'V', VS contains the orthogonal 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 REAL 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,3*N). !> Also, if SENSE = 'E' or 'V' or 'B', !> LWORK >= N+2*SDIM*(N-SDIM), where SDIM is the number of !> selected eigenvalues computed by this routine. Note that !> N+2*SDIM*(N-SDIM) <= N+N*N/2. Note also that an error is only !> returned if LWORK < max(1,3*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 bounds on the optimal sizes of the !> arrays WORK and IWORK, returns these values as the first !> entries of the WORK and IWORK arrays, and no error messages !> related to LWORK or LIWORK are issued by XERBLA. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (MAX(1,LIWORK)) !> On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK. !> |
| [in] | LIWORK | !> LIWORK is INTEGER !> The dimension of the array IWORK. !> LIWORK >= 1; if SENSE = 'V' or 'B', LIWORK >= SDIM*(N-SDIM). !> Note that SDIM*(N-SDIM) <= N*N/4. Note also that an error is !> only returned if LIWORK < 1, but if SENSE = 'V' or 'B' this !> may not be large enough. !> !> If LIWORK = -1, then a workspace query is assumed; the !> routine only calculates upper bounds on the optimal sizes of !> the arrays WORK and IWORK, returns these values as the first !> entries of the WORK and IWORK arrays, and no error messages !> related to LWORK or LIWORK are 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. !> > 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 WR and WI !> 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 278 of file sgeesx.f.
| subroutine sgeev | ( | character | jobvl, |
| character | jobvr, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( * ) | wr, | ||
| real, dimension( * ) | wi, | ||
| real, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| real, dimension( ldvr, * ) | vr, | ||
| integer | ldvr, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SGEEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Download SGEEV + dependencies [TGZ] [ZIP] [TXT]
!> !> SGEEV computes for an N-by-N real 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 A 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 REAL 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] | WR | !> WR is REAL array, dimension (N) !> |
| [out] | WI | !> WI is REAL array, dimension (N) !> WR and WI contain the real and imaginary parts, !> respectively, of the computed eigenvalues. Complex !> conjugate pairs of eigenvalues appear consecutively !> with the eigenvalue having the positive imaginary part !> first. !> |
| [out] | VL | !> VL is REAL 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. !> If the j-th eigenvalue is real, then u(j) = VL(:,j), !> the j-th column of VL. !> If the j-th and (j+1)-st eigenvalues form a complex !> conjugate pair, then u(j) = VL(:,j) + i*VL(:,j+1) and !> u(j+1) = VL(:,j) - i*VL(:,j+1). !> |
| [in] | LDVL | !> LDVL is INTEGER !> The leading dimension of the array VL. LDVL >= 1; if !> JOBVL = 'V', LDVL >= N. !> |
| [out] | VR | !> VR is REAL 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. !> If the j-th eigenvalue is real, then v(j) = VR(:,j), !> the j-th column of VR. !> If the j-th and (j+1)-st eigenvalues form a complex !> conjugate pair, then v(j) = VR(:,j) + i*VR(:,j+1) and !> v(j+1) = VR(:,j) - i*VR(:,j+1). !> |
| [in] | LDVR | !> LDVR is INTEGER !> The leading dimension of the array VR. LDVR >= 1; if !> JOBVR = 'V', LDVR >= N. !> |
| [out] | WORK | !> WORK is REAL 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,3*N), and !> if JOBVL = 'V' or JOBVR = 'V', LWORK >= 4*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] | 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 WR and WI contain eigenvalues which !> have converged. !> |
Definition at line 190 of file sgeev.f.
| subroutine sgeevx | ( | character | balanc, |
| character | jobvl, | ||
| character | jobvr, | ||
| character | sense, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( * ) | wr, | ||
| real, dimension( * ) | wi, | ||
| real, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| real, dimension( ldvr, * ) | vr, | ||
| integer | ldvr, | ||
| integer | ilo, | ||
| integer | ihi, | ||
| real, dimension( * ) | scale, | ||
| real | abnrm, | ||
| real, dimension( * ) | rconde, | ||
| real, dimension( * ) | rcondv, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | info ) |
SGEEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Download SGEEVX + dependencies [TGZ] [ZIP] [TXT]
!> !> SGEEVX computes for an N-by-N real 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, i.e. 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 REAL 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 real Schur form of the balanced !> version of the input matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | WR | !> WR is REAL array, dimension (N) !> |
| [out] | WI | !> WI is REAL array, dimension (N) !> WR and WI contain the real and imaginary parts, !> respectively, of the computed eigenvalues. Complex !> conjugate pairs of eigenvalues will appear consecutively !> with the eigenvalue having the positive imaginary part !> first. !> |
| [out] | VL | !> VL is REAL 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. !> If the j-th eigenvalue is real, then u(j) = VL(:,j), !> the j-th column of VL. !> If the j-th and (j+1)-st eigenvalues form a complex !> conjugate pair, then u(j) = VL(:,j) + i*VL(:,j+1) and !> u(j+1) = VL(:,j) - i*VL(:,j+1). !> |
| [in] | LDVL | !> LDVL is INTEGER !> The leading dimension of the array VL. LDVL >= 1; if !> JOBVL = 'V', LDVL >= N. !> |
| [out] | VR | !> VR is REAL 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. !> If the j-th eigenvalue is real, then v(j) = VR(:,j), !> the j-th column of VR. !> If the j-th and (j+1)-st eigenvalues form a complex !> conjugate pair, then v(j) = VR(:,j) + i*VR(:,j+1) and !> v(j+1) = VR(:,j) - i*VR(:,j+1). !> |
| [in] | LDVR | !> LDVR is INTEGER !> The leading dimension of the array 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 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 REAL 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 JOBVL = 'V' or JOBVR = 'V', !> LWORK >= 3*N. If SENSE = 'V' or 'B', LWORK >= N*(N+6). !> 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] | IWORK | !> IWORK is INTEGER array, dimension (2*N-2) !> If SENSE = 'N' or 'E', not referenced. !> |
| [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 WR !> and WI contain eigenvalues which have converged. !> |
Definition at line 303 of file sgeevx.f.
| subroutine sgegs | ( | character | jobvsl, |
| character | jobvsr, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( * ) | alphar, | ||
| real, dimension( * ) | alphai, | ||
| real, dimension( * ) | beta, | ||
| real, dimension( ldvsl, * ) | vsl, | ||
| integer | ldvsl, | ||
| real, dimension( ldvsr, * ) | vsr, | ||
| integer | ldvsr, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SGEGS computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Download SGEGS + dependencies [TGZ] [ZIP] [TXT]
!> !> This routine is deprecated and has been replaced by routine SGGES. !> !> SGEGS computes the eigenvalues, real Schur form, and, optionally, !> left and or/right Schur vectors of a real matrix pair (A,B). !> Given two square matrices A and B, the generalized real Schur !> factorization has the form !> !> A = Q*S*Z**T, B = Q*T*Z**T !> !> where Q and Z are orthogonal matrices, T is upper triangular, and S !> is an upper quasi-triangular matrix with 1-by-1 and 2-by-2 diagonal !> blocks, the 2-by-2 blocks corresponding to complex conjugate pairs !> of eigenvalues of (A,B). 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 !> SGEGV should be used instead. See SGEGV 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 REAL array, dimension (LDA, N) !> On entry, the matrix A. !> On exit, the upper quasi-triangular matrix S from the !> generalized real Schur factorization. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of A. LDA >= max(1,N). !> |
| [in,out] | B | !> B is REAL array, dimension (LDB, N) !> On entry, the matrix B. !> On exit, the upper triangular matrix T from the generalized !> real Schur factorization. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of B. LDB >= max(1,N). !> |
| [out] | ALPHAR | !> ALPHAR is REAL array, dimension (N) !> The real parts of each scalar alpha defining an eigenvalue !> of GNEP. !> |
| [out] | ALPHAI | !> ALPHAI is REAL array, dimension (N) !> The imaginary parts of each scalar alpha defining an !> eigenvalue of GNEP. If ALPHAI(j) is zero, then the j-th !> eigenvalue is real; if positive, then the j-th and (j+1)-st !> eigenvalues are a complex conjugate pair, with !> ALPHAI(j+1) = -ALPHAI(j). !> |
| [out] | BETA | !> BETA is REAL array, dimension (N) !> The scalars beta that define the eigenvalues of GNEP. !> Together, the quantities alpha = (ALPHAR(j),ALPHAI(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 REAL 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 REAL 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 REAL 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,4*N). !> For good performance, LWORK must generally be larger. !> To compute the optimal value of LWORK, call ILAENV to get !> blocksizes (for SGEQRF, SORMQR, and SORGQR.) Then compute: !> NB -- MAX of the blocksizes for SGEQRF, SORMQR, and SORGQR !> The optimal LWORK is 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] | 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 ALPHAR(j), ALPHAI(j), and BETA(j) should !> be correct for j=INFO+1,...,N. !> > N: errors that usually indicate LAPACK problems: !> =N+1: error return from SGGBAL !> =N+2: error return from SGEQRF !> =N+3: error return from SORMQR !> =N+4: error return from SORGQR !> =N+5: error return from SGGHRD !> =N+6: error return from SHGEQZ (other than failed !> iteration) !> =N+7: error return from SGGBAK (computing VSL) !> =N+8: error return from SGGBAK (computing VSR) !> =N+9: error return from SLASCL (various places) !> |
Definition at line 224 of file sgegs.f.
| subroutine sgegv | ( | character | jobvl, |
| character | jobvr, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( * ) | alphar, | ||
| real, dimension( * ) | alphai, | ||
| real, dimension( * ) | beta, | ||
| real, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| real, dimension( ldvr, * ) | vr, | ||
| integer | ldvr, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SGEEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Download SGEGV + dependencies [TGZ] [ZIP] [TXT]
!> !> This routine is deprecated and has been replaced by routine SGGEV. !> !> SGEGV computes the eigenvalues and, optionally, the left and/or right !> eigenvectors of a real 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 REAL array, dimension (LDA, N) !> On entry, the matrix A. !> If JOBVL = 'V' or JOBVR = 'V', then on exit A !> contains the real 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 !> blocks from the Schur form will be correct. See SGGHRD and !> SHGEQZ for details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of A. LDA >= max(1,N). !> |
| [in,out] | B | !> B is REAL 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 those elements of !> B corresponding to the diagonal blocks from the Schur form of !> A will be correct. See SGGHRD and SHGEQZ for details. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of B. LDB >= max(1,N). !> |
| [out] | ALPHAR | !> ALPHAR is REAL array, dimension (N) !> The real parts of each scalar alpha defining an eigenvalue of !> GNEP. !> |
| [out] | ALPHAI | !> ALPHAI is REAL array, dimension (N) !> The imaginary parts of each scalar alpha defining an !> eigenvalue of GNEP. If ALPHAI(j) is zero, then the j-th !> eigenvalue is real; if positive, then the j-th and !> (j+1)-st eigenvalues are a complex conjugate pair, with !> ALPHAI(j+1) = -ALPHAI(j). !> |
| [out] | BETA | !> BETA is REAL array, dimension (N) !> The scalars beta that define the eigenvalues of GNEP. !> !> Together, the quantities alpha = (ALPHAR(j),ALPHAI(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 REAL 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. !> If the j-th eigenvalue is real, then u(j) = VL(:,j). !> If the j-th and (j+1)-st eigenvalues form a complex conjugate !> pair, then !> u(j) = VL(:,j) + i*VL(:,j+1) !> and !> u(j+1) = VL(:,j) - i*VL(:,j+1). !> !> 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 REAL 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. !> If the j-th eigenvalue is real, then x(j) = VR(:,j). !> If the j-th and (j+1)-st eigenvalues form a complex conjugate !> pair, then !> x(j) = VR(:,j) + i*VR(:,j+1) !> and !> x(j+1) = VR(:,j) - i*VR(:,j+1). !> !> Each eigenvector is scaled so that its largest component has !> abs(real part) + abs(imag. part) = 1, except for eigenvalues !> 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 REAL 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,8*N). !> For good performance, LWORK must generally be larger. !> To compute the optimal value of LWORK, call ILAENV to get !> blocksizes (for SGEQRF, SORMQR, and SORGQR.) Then compute: !> NB -- MAX of the blocksizes for SGEQRF, SORMQR, and SORGQR; !> The optimal LWORK is: !> 2*N + MAX( 6*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] | 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 ALPHAR(j), ALPHAI(j), and BETA(j) !> should be correct for j=INFO+1,...,N. !> > N: errors that usually indicate LAPACK problems: !> =N+1: error return from SGGBAL !> =N+2: error return from SGEQRF !> =N+3: error return from SORMQR !> =N+4: error return from SORGQR !> =N+5: error return from SGGHRD !> =N+6: error return from SHGEQZ (other than failed !> iteration) !> =N+7: error return from STGEVC !> =N+8: error return from SGGBAK (computing VL) !> =N+9: error return from SGGBAK (computing VR) !> =N+10: error return from SLASCL (various calls) !> |
!> !> Balancing !> --------- !> !> This driver calls SGGBAL 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, SGGBAK 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 real Schur !> form[*] of the versions of A and B. If no eigenvectors !> are computed, then only the diagonal blocks will be correct. !> !> [*] See SHGEQZ, SGEGS, or read the book , !> by Golub & van Loan, pub. by Johns Hopkins U. Press. !>
Definition at line 304 of file sgegv.f.
| subroutine sgges | ( | character | jobvsl, |
| character | jobvsr, | ||
| character | sort, | ||
| external | selctg, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | sdim, | ||
| real, dimension( * ) | alphar, | ||
| real, dimension( * ) | alphai, | ||
| real, dimension( * ) | beta, | ||
| real, dimension( ldvsl, * ) | vsl, | ||
| integer | ldvsl, | ||
| real, dimension( ldvsr, * ) | vsr, | ||
| integer | ldvsr, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| logical, dimension( * ) | bwork, | ||
| integer | info ) |
SGGES computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices
Download SGGES + dependencies [TGZ] [ZIP] [TXT]
!> !> SGGES computes for a pair of N-by-N real nonsymmetric matrices (A,B), !> the generalized eigenvalues, the generalized real Schur form (S,T), !> optionally, the left and/or right matrices of Schur vectors (VSL and !> VSR). This gives the generalized Schur factorization !> !> (A,B) = ( (VSL)*S*(VSR)**T, (VSL)*T*(VSR)**T ) !> !> Optionally, it also orders the eigenvalues so that a selected cluster !> of eigenvalues appears in the leading diagonal blocks of the upper !> quasi-triangular matrix S and the upper triangular matrix T.The !> leading columns of VSL and VSR then form an orthonormal basis for the !> corresponding left and right eigenspaces (deflating subspaces). !> !> (If only the generalized eigenvalues are needed, use the driver !> SGGEV 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 or both being zero. !> !> A pair of matrices (S,T) is in generalized real Schur form if T is !> upper triangular with non-negative diagonal and S is block upper !> triangular with 1-by-1 and 2-by-2 blocks. 1-by-1 blocks correspond !> to real generalized eigenvalues, while 2-by-2 blocks of S will be !> by making the corresponding elements of T have the !> form: !> [ a 0 ] !> [ 0 b ] !> !> and the pair of corresponding 2-by-2 blocks in S and T will have a !> complex conjugate pair of generalized eigenvalues. !> !>
| [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 three REAL 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 (ALPHAR(j)+ALPHAI(j))/BETA(j) is selected if !> SELCTG(ALPHAR(j),ALPHAI(j),BETA(j)) is true; i.e. if either !> one of a complex conjugate pair of eigenvalues is selected, !> then both complex eigenvalues are selected. !> !> Note that in the ill-conditioned case, a selected complex !> eigenvalue may no longer satisfy SELCTG(ALPHAR(j),ALPHAI(j), !> BETA(j)) = .TRUE. after ordering. INFO is to be set to N+2 !> in this case. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, VSL, and VSR. N >= 0. !> |
| [in,out] | A | !> A is REAL 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 REAL 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. (Complex conjugate pairs for which !> SELCTG is true for either eigenvalue count as 2.) !> |
| [out] | ALPHAR | !> ALPHAR is REAL array, dimension (N) !> |
| [out] | ALPHAI | !> ALPHAI is REAL array, dimension (N) !> |
| [out] | BETA | !> BETA is REAL array, dimension (N) !> On exit, (ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N, will !> be the generalized eigenvalues. ALPHAR(j) + ALPHAI(j)*i, !> and BETA(j),j=1,...,N are the diagonals of the complex Schur !> form (S,T) that would result if the 2-by-2 diagonal blocks of !> the real Schur form of (A,B) were further reduced to !> triangular form using 2-by-2 complex unitary transformations. !> If ALPHAI(j) is zero, then the j-th eigenvalue is real; if !> positive, then the j-th and (j+1)-st eigenvalues are a !> complex conjugate pair, with ALPHAI(j+1) negative. !> !> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(j)/BETA(j) !> may easily over- or underflow, and BETA(j) may even be zero. !> Thus, the user should avoid naively computing the ratio. !> However, ALPHAR and ALPHAI 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 REAL 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 REAL 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 REAL 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 LWORK >= max(8*N,6*N+16). !> 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] | 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 ALPHAR(j), ALPHAI(j), and BETA(j) should !> be correct for j=INFO+1,...,N. !> > N: =N+1: other than QZ iteration failed in SHGEQZ. !> =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 STGSEN. !> |
Definition at line 281 of file sgges.f.
| subroutine sgges3 | ( | character | jobvsl, |
| character | jobvsr, | ||
| character | sort, | ||
| external | selctg, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | sdim, | ||
| real, dimension( * ) | alphar, | ||
| real, dimension( * ) | alphai, | ||
| real, dimension( * ) | beta, | ||
| real, dimension( ldvsl, * ) | vsl, | ||
| integer | ldvsl, | ||
| real, dimension( ldvsr, * ) | vsr, | ||
| integer | ldvsr, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| logical, dimension( * ) | bwork, | ||
| integer | info ) |
SGGES3 computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices (blocked algorithm)
Download SGGES3 + dependencies [TGZ] [ZIP] [TXT]
!> !> SGGES3 computes for a pair of N-by-N real nonsymmetric matrices (A,B), !> the generalized eigenvalues, the generalized real Schur form (S,T), !> optionally, the left and/or right matrices of Schur vectors (VSL and !> VSR). This gives the generalized Schur factorization !> !> (A,B) = ( (VSL)*S*(VSR)**T, (VSL)*T*(VSR)**T ) !> !> Optionally, it also orders the eigenvalues so that a selected cluster !> of eigenvalues appears in the leading diagonal blocks of the upper !> quasi-triangular matrix S and the upper triangular matrix T.The !> leading columns of VSL and VSR then form an orthonormal basis for the !> corresponding left and right eigenspaces (deflating subspaces). !> !> (If only the generalized eigenvalues are needed, use the driver !> SGGEV 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 or both being zero. !> !> A pair of matrices (S,T) is in generalized real Schur form if T is !> upper triangular with non-negative diagonal and S is block upper !> triangular with 1-by-1 and 2-by-2 blocks. 1-by-1 blocks correspond !> to real generalized eigenvalues, while 2-by-2 blocks of S will be !> by making the corresponding elements of T have the !> form: !> [ a 0 ] !> [ 0 b ] !> !> and the pair of corresponding 2-by-2 blocks in S and T will have a !> complex conjugate pair of generalized eigenvalues. !> !>
| [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 three REAL 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 (ALPHAR(j)+ALPHAI(j))/BETA(j) is selected if !> SELCTG(ALPHAR(j),ALPHAI(j),BETA(j)) is true; i.e. if either !> one of a complex conjugate pair of eigenvalues is selected, !> then both complex eigenvalues are selected. !> !> Note that in the ill-conditioned case, a selected complex !> eigenvalue may no longer satisfy SELCTG(ALPHAR(j),ALPHAI(j), !> BETA(j)) = .TRUE. after ordering. INFO is to be set to N+2 !> in this case. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A, B, VSL, and VSR. N >= 0. !> |
| [in,out] | A | !> A is REAL 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 REAL 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. (Complex conjugate pairs for which !> SELCTG is true for either eigenvalue count as 2.) !> |
| [out] | ALPHAR | !> ALPHAR is REAL array, dimension (N) !> |
| [out] | ALPHAI | !> ALPHAI is REAL array, dimension (N) !> |
| [out] | BETA | !> BETA is REAL array, dimension (N) !> On exit, (ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N, will !> be the generalized eigenvalues. ALPHAR(j) + ALPHAI(j)*i, !> and BETA(j),j=1,...,N are the diagonals of the complex Schur !> form (S,T) that would result if the 2-by-2 diagonal blocks of !> the real Schur form of (A,B) were further reduced to !> triangular form using 2-by-2 complex unitary transformations. !> If ALPHAI(j) is zero, then the j-th eigenvalue is real; if !> positive, then the j-th and (j+1)-st eigenvalues are a !> complex conjugate pair, with ALPHAI(j+1) negative. !> !> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(j)/BETA(j) !> may easily over- or underflow, and BETA(j) may even be zero. !> Thus, the user should avoid naively computing the ratio. !> However, ALPHAR and ALPHAI 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 REAL 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 REAL 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 REAL 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] | 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 ALPHAR(j), ALPHAI(j), and BETA(j) should !> be correct for j=INFO+1,...,N. !> > N: =N+1: other than QZ iteration failed in SLAQZ0. !> =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 STGSEN. !> |
Definition at line 279 of file sgges3.f.
| subroutine sggesx | ( | character | jobvsl, |
| character | jobvsr, | ||
| character | sort, | ||
| external | selctg, | ||
| character | sense, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | sdim, | ||
| real, dimension( * ) | alphar, | ||
| real, dimension( * ) | alphai, | ||
| real, dimension( * ) | beta, | ||
| real, dimension( ldvsl, * ) | vsl, | ||
| integer | ldvsl, | ||
| real, dimension( ldvsr, * ) | vsr, | ||
| integer | ldvsr, | ||
| real, dimension( 2 ) | rconde, | ||
| real, dimension( 2 ) | rcondv, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| logical, dimension( * ) | bwork, | ||
| integer | info ) |
SGGESX computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices
Download SGGESX + dependencies [TGZ] [ZIP] [TXT]
!> !> SGGESX computes for a pair of N-by-N real nonsymmetric matrices !> (A,B), the generalized eigenvalues, the real 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)**T, (VSL) T (VSR)**T ) !> !> Optionally, it also orders the eigenvalues so that a selected cluster !> of eigenvalues appears in the leading diagonal blocks of the upper !> quasi-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 real Schur form if T is !> upper triangular with non-negative diagonal and S is block upper !> triangular with 1-by-1 and 2-by-2 blocks. 1-by-1 blocks correspond !> to real generalized eigenvalues, while 2-by-2 blocks of S will be !> by making the corresponding elements of T have the !> form: !> [ a 0 ] !> [ 0 b ] !> !> and the pair of corresponding 2-by-2 blocks in S and T will have a !> complex conjugate pair of generalized eigenvalues. !> !>
| [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 three REAL 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 (ALPHAR(j)+ALPHAI(j))/BETA(j) is selected if !> SELCTG(ALPHAR(j),ALPHAI(j),BETA(j)) is true; i.e. if either !> one of a complex conjugate pair of eigenvalues is selected, !> then both complex eigenvalues are selected. !> Note that a selected complex eigenvalue may no longer satisfy !> SELCTG(ALPHAR(j),ALPHAI(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. !> |
| [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 REAL 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 REAL 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. (Complex conjugate pairs for which !> SELCTG is true for either eigenvalue count as 2.) !> |
| [out] | ALPHAR | !> ALPHAR is REAL array, dimension (N) !> |
| [out] | ALPHAI | !> ALPHAI is REAL array, dimension (N) !> |
| [out] | BETA | !> BETA is REAL array, dimension (N) !> On exit, (ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N, will !> be the generalized eigenvalues. ALPHAR(j) + ALPHAI(j)*i !> and BETA(j),j=1,...,N are the diagonals of the complex Schur !> form (S,T) that would result if the 2-by-2 diagonal blocks of !> the real Schur form of (A,B) were further reduced to !> triangular form using 2-by-2 complex unitary transformations. !> If ALPHAI(j) is zero, then the j-th eigenvalue is real; if !> positive, then the j-th and (j+1)-st eigenvalues are a !> complex conjugate pair, with ALPHAI(j+1) negative. !> !> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(j)/BETA(j) !> may easily over- or underflow, and BETA(j) may even be zero. !> Thus, the user should avoid naively computing the ratio. !> However, ALPHAR and ALPHAI 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 REAL 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 REAL 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 numbers for the selected deflating !> subspaces. !> Not referenced if SENSE = 'N' or 'E'. !> |
| [out] | WORK | !> WORK is REAL 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( 8*N, 6*N+16, 2*SDIM*(N-SDIM) ), else !> LWORK >= max( 8*N, 6*N+16 ). !> Note that 2*SDIM*(N-SDIM) <= N*N/2. !> Note also that an error is only returned if !> LWORK < max( 8*N, 6*N+16), 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] | 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 IWORK. !> If SENSE = 'N' or N = 0, LIWORK >= 1, otherwise !> LIWORK >= N+6. !> !> 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 ALPHAR(j), ALPHAI(j), and BETA(j) should !> be correct for j=INFO+1,...,N. !> > N: =N+1: other than QZ iteration failed in SHGEQZ !> =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 STGSEN. !> |
!> !> An approximate (asymptotic) bound on the average absolute error of !> the selected eigenvalues is !> !> EPS * norm((A, B)) / RCONDE( 1 ). !> !> An approximate (asymptotic) bound on the maximum angular error in !> the computed deflating subspaces is !> !> EPS * norm((A, B)) / RCONDV( 2 ). !> !> See LAPACK User's Guide, section 4.11 for more information. !>
Definition at line 361 of file sggesx.f.
| subroutine sggev | ( | character | jobvl, |
| character | jobvr, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( * ) | alphar, | ||
| real, dimension( * ) | alphai, | ||
| real, dimension( * ) | beta, | ||
| real, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| real, dimension( ldvr, * ) | vr, | ||
| integer | ldvr, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SGGEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Download SGGEV + dependencies [TGZ] [ZIP] [TXT]
!> !> SGGEV computes for a pair of N-by-N real 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 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] | 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 REAL 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 REAL 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] | ALPHAR | !> ALPHAR is REAL array, dimension (N) !> |
| [out] | ALPHAI | !> ALPHAI is REAL array, dimension (N) !> |
| [out] | BETA | !> BETA is REAL array, dimension (N) !> On exit, (ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N, will !> be the generalized eigenvalues. If ALPHAI(j) is zero, then !> the j-th eigenvalue is real; if positive, then the j-th and !> (j+1)-st eigenvalues are a complex conjugate pair, with !> ALPHAI(j+1) negative. !> !> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(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, ALPHAR and ALPHAI 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 REAL 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 the j-th eigenvalue is real, then !> u(j) = VL(:,j), the j-th column of VL. If the j-th and !> (j+1)-th eigenvalues form a complex conjugate pair, then !> u(j) = VL(:,j)+i*VL(:,j+1) and u(j+1) = VL(:,j)-i*VL(:,j+1). !> 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 REAL 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 the j-th eigenvalue is real, then !> v(j) = VR(:,j), the j-th column of VR. If the j-th and !> (j+1)-th eigenvalues form a complex conjugate pair, then !> v(j) = VR(:,j)+i*VR(:,j+1) and v(j+1) = VR(:,j)-i*VR(:,j+1). !> 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 REAL 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,8*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] | 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 ALPHAR(j), ALPHAI(j), and BETA(j) !> should be correct for j=INFO+1,...,N. !> > N: =N+1: other than QZ iteration failed in SHGEQZ. !> =N+2: error return from STGEVC. !> |
Definition at line 224 of file sggev.f.
| subroutine sggev3 | ( | character | jobvl, |
| character | jobvr, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( * ) | alphar, | ||
| real, dimension( * ) | alphai, | ||
| real, dimension( * ) | beta, | ||
| real, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| real, dimension( ldvr, * ) | vr, | ||
| integer | ldvr, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SGGEV3 computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices (blocked algorithm)
Download SGGEV3 + dependencies [TGZ] [ZIP] [TXT]
!> !> SGGEV3 computes for a pair of N-by-N real 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 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] | 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 REAL 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 REAL 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] | ALPHAR | !> ALPHAR is REAL array, dimension (N) !> |
| [out] | ALPHAI | !> ALPHAI is REAL array, dimension (N) !> |
| [out] | BETA | !> BETA is REAL array, dimension (N) !> On exit, (ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N, will !> be the generalized eigenvalues. If ALPHAI(j) is zero, then !> the j-th eigenvalue is real; if positive, then the j-th and !> (j+1)-st eigenvalues are a complex conjugate pair, with !> ALPHAI(j+1) negative. !> !> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(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, ALPHAR and ALPHAI 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 REAL 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 the j-th eigenvalue is real, then !> u(j) = VL(:,j), the j-th column of VL. If the j-th and !> (j+1)-th eigenvalues form a complex conjugate pair, then !> u(j) = VL(:,j)+i*VL(:,j+1) and u(j+1) = VL(:,j)-i*VL(:,j+1). !> 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 REAL 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 the j-th eigenvalue is real, then !> v(j) = VR(:,j), the j-th column of VR. If the j-th and !> (j+1)-th eigenvalues form a complex conjugate pair, then !> v(j) = VR(:,j)+i*VR(:,j+1) and v(j+1) = VR(:,j)-i*VR(:,j+1). !> 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 REAL array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> !> 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. !> = 1,...,N: !> The QZ iteration failed. No eigenvectors have been !> calculated, but ALPHAR(j), ALPHAI(j), and BETA(j) !> should be correct for j=INFO+1,...,N. !> > N: =N+1: other than QZ iteration failed in SLAQZ0. !> =N+2: error return from STGEVC. !> |
Definition at line 223 of file sggev3.f.
| subroutine sggevx | ( | character | balanc, |
| character | jobvl, | ||
| character | jobvr, | ||
| character | sense, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( * ) | alphar, | ||
| real, dimension( * ) | alphai, | ||
| real, dimension( * ) | beta, | ||
| real, dimension( ldvl, * ) | vl, | ||
| integer | ldvl, | ||
| real, 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, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| logical, dimension( * ) | bwork, | ||
| integer | info ) |
SGGEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Download SGGEVX + dependencies [TGZ] [ZIP] [TXT]
!> !> SGGEVX computes for a pair of N-by-N real nonsymmetric matrices (A,B) !> the generalized eigenvalues, and optionally, the left and/or right !> generalized eigenvectors. !> !> Optionally also, it 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 REAL 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 real 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 REAL 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 real 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] | ALPHAR | !> ALPHAR is REAL array, dimension (N) !> |
| [out] | ALPHAI | !> ALPHAI is REAL array, dimension (N) !> |
| [out] | BETA | !> BETA is REAL array, dimension (N) !> On exit, (ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N, will !> be the generalized eigenvalues. If ALPHAI(j) is zero, then !> the j-th eigenvalue is real; if positive, then the j-th and !> (j+1)-st eigenvalues are a complex conjugate pair, with !> ALPHAI(j+1) negative. !> !> Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(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, ALPHAR and ALPHAI 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 REAL 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 the j-th eigenvalue is real, then !> u(j) = VL(:,j), the j-th column of VL. If the j-th and !> (j+1)-th eigenvalues form a complex conjugate pair, then !> u(j) = VL(:,j)+i*VL(:,j+1) and u(j+1) = VL(:,j)-i*VL(:,j+1). !> Each eigenvector will be scaled so the largest component 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 REAL 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 the j-th eigenvalue is real, then !> v(j) = VR(:,j), the j-th column of VR. If the j-th and !> (j+1)-th eigenvalues form a complex conjugate pair, then !> v(j) = VR(:,j)+i*VR(:,j+1) and v(j+1) = VR(:,j)-i*VR(:,j+1). !> Each eigenvector will be scaled so the largest component 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. !> For a complex conjugate pair of eigenvalues two consecutive !> elements of RCONDE are set to the same value. Thus RCONDE(j), !> RCONDV(j), and the j-th columns of VL and VR all correspond !> to the j-th eigenpair. !> 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. For a complex eigenvector two consecutive !> elements of RCONDV are set to the same value. 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 REAL 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 BALANC = 'S' or 'B', or JOBVL = 'V', or JOBVR = 'V', !> LWORK >= max(1,6*N). !> If SENSE = 'E', LWORK >= max(1,10*N). !> If SENSE = 'V' or 'B', LWORK >= 2*N*N+8*N+16. !> !> 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] | IWORK | !> IWORK is INTEGER array, dimension (N+6) !> 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 ALPHAR(j), ALPHAI(j), and BETA(j) !> should be correct for j=INFO+1,...,N. !> > N: =N+1: other than QZ iteration failed in SHGEQZ. !> =N+2: error return from STGEVC. !> |
!> !> 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 387 of file sggevx.f.