|
|
◆ zgees()
| void zgees |
( |
char |
jobvs, |
|
|
char |
sort, |
|
|
int(*)(doublecomplex) |
select, |
|
|
int |
n, |
|
|
int |
lda, |
|
|
doublecomplex |
a[], |
|
|
int * |
sdim, |
|
|
doublecomplex |
w[], |
|
|
int |
ldvs, |
|
|
doublecomplex |
vs[], |
|
|
doublecomplex |
work[], |
|
|
int |
lwork, |
|
|
double |
rwork[], |
|
|
int |
bwork[], |
|
|
int * |
info |
|
) |
| |
(Simple driver) Schur factorization of a complex matrix
- Purpose
- This routine computes for an n x 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.
The matrix A is reduced to upper Hessenberg form first. Then the eigenvalues and the Schur factorization are computed by QR method.
- Parameters
-
| [in] | jobvs | = 'N': Schur vectors are not computed.
= 'V': Schur vectors are computed. |
| [in] | sort | 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 | sort = 'S': select is used to select eigenvalues to order to the top left of the Schur form.
The eigenvalue w[j] is selected if select(w[j]) is true (= 1).
sort = 'N': select is not referenced. |
| [in] | n | Order of the matrix A. (n >= 0) (If n = 0, returns without computation) |
| [in] | lda | Leading dimension of the two dimensional array a[][]. (lda >= max(1, n)) |
| [in,out] | a[][] | Array a[la][lda] (la >= n)
[in] n x n matrix A.
[out] a[][] has been overwritten by its Schur form T. |
| [out] | sdim | sort = 'N': sdim = 0.
sort = 'S': sdim = number of eigenvalues for which select is true. |
| [out] | w[] | Array w[lw] (lw >= n)
w[] contains the computed eigenvalues, in the same order that they appear on the diagonal of the output Schur form T. |
| [in] | ldvs | Leading dimension of the two dimensional array vs[][]. (ldvs >= 1 if jobvs = 'N', ldvs >= n if jobvs = 'V') |
| [out] | vs[][] | Array vs[lvs][ldvs] (lvs >= n)
jobvs = 'V': vs[][] contains the unitary matrix Z of Schur vectors.
jobvs = 'N': vs[][] is not referenced. |
| [out] | work[] | Array work[lwork]
Complex work array.
On exit, if info = 0, work[0] returns the optimal lwork. |
| [in] | lwork | The length of 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, and returns the value in work[0]. |
| [out] | rwork[] | Array rwork[lrwork] (lrwork >= n)
Work array. |
| [out] | bwork[] | Array bwork[lbwork] (lbwork >= n)
Logical type (integer) work array.
Not referenced if sort = 'N'. |
| [out] | info | = 0: Successful exit
= -1: The argument jobvs had an illegal value (jobvs != 'V' nor 'N')
= -2: The argument sort had an illegal value (sort != 'S' nor 'N')
= -4: The argument n had an illegal value (n < 0)
= -5: The argument lda had an illegal value (lda < max(1, n))
= -9: The argument ldvs had an illegal value (ldvs too small)
= -12: The argument lwork had an illegal value (lwork too small)
= i (0 < i <= n): The QR algorithm failed to compute all the eigenvalues. Elements 0 to ilo-2 and i to n-1 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. |
- Reference
- LAPACK
|