LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
zgges.f
Go to the documentation of this file.
1*> \brief <b> ZGGES computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE matrices</b>
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8*> Download ZGGES + dependencies
9*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zgges.f">
10*> [TGZ]</a>
11*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zgges.f">
12*> [ZIP]</a>
13*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgges.f">
14*> [TXT]</a>
15*
16* Definition:
17* ===========
18*
19* SUBROUTINE ZGGES( JOBVSL, JOBVSR, SORT, SELCTG, N, A, LDA, B, LDB,
20* SDIM, ALPHA, BETA, VSL, LDVSL, VSR, LDVSR, WORK,
21* LWORK, RWORK, BWORK, INFO )
22*
23* .. Scalar Arguments ..
24* CHARACTER JOBVSL, JOBVSR, SORT
25* INTEGER INFO, LDA, LDB, LDVSL, LDVSR, LWORK, N, SDIM
26* ..
27* .. Array Arguments ..
28* LOGICAL BWORK( * )
29* DOUBLE PRECISION RWORK( * )
30* COMPLEX*16 A( LDA, * ), ALPHA( * ), B( LDB, * ),
31* $ BETA( * ), VSL( LDVSL, * ), VSR( LDVSR, * ),
32* $ WORK( * )
33* ..
34* .. Function Arguments ..
35* LOGICAL SELCTG
36* EXTERNAL SELCTG
37* ..
38*
39*
40*> \par Purpose:
41* =============
42*>
43*> \verbatim
44*>
45*> ZGGES computes for a pair of N-by-N complex nonsymmetric matrices
46*> (A,B), the generalized eigenvalues, the generalized complex Schur
47*> form (S, T), and optionally left and/or right Schur vectors (VSL
48*> and VSR). This gives the generalized Schur factorization
49*>
50*> (A,B) = ( (VSL)*S*(VSR)**H, (VSL)*T*(VSR)**H )
51*>
52*> where (VSR)**H is the conjugate-transpose of VSR.
53*>
54*> Optionally, it also orders the eigenvalues so that a selected cluster
55*> of eigenvalues appears in the leading diagonal blocks of the upper
56*> triangular matrix S and the upper triangular matrix T. The leading
57*> columns of VSL and VSR then form an unitary basis for the
58*> corresponding left and right eigenspaces (deflating subspaces).
59*>
60*> (If only the generalized eigenvalues are needed, use the driver
61*> ZGGEV instead, which is faster.)
62*>
63*> A generalized eigenvalue for a pair of matrices (A,B) is a scalar w
64*> or a ratio alpha/beta = w, such that A - w*B is singular. It is
65*> usually represented as the pair (alpha,beta), as there is a
66*> reasonable interpretation for beta=0, and even for both being zero.
67*>
68*> A pair of matrices (S,T) is in generalized complex Schur form if S
69*> and T are upper triangular and, in addition, the diagonal elements
70*> of T are non-negative real numbers.
71*> \endverbatim
72*
73* Arguments:
74* ==========
75*
76*> \param[in] JOBVSL
77*> \verbatim
78*> JOBVSL is CHARACTER*1
79*> = 'N': do not compute the left Schur vectors;
80*> = 'V': compute the left Schur vectors.
81*> \endverbatim
82*>
83*> \param[in] JOBVSR
84*> \verbatim
85*> JOBVSR is CHARACTER*1
86*> = 'N': do not compute the right Schur vectors;
87*> = 'V': compute the right Schur vectors.
88*> \endverbatim
89*>
90*> \param[in] SORT
91*> \verbatim
92*> SORT is CHARACTER*1
93*> Specifies whether or not to order the eigenvalues on the
94*> diagonal of the generalized Schur form.
95*> = 'N': Eigenvalues are not ordered;
96*> = 'S': Eigenvalues are ordered (see SELCTG).
97*> \endverbatim
98*>
99*> \param[in] SELCTG
100*> \verbatim
101*> SELCTG is a LOGICAL FUNCTION of two COMPLEX*16 arguments
102*> SELCTG must be declared EXTERNAL in the calling subroutine.
103*> If SORT = 'N', SELCTG is not referenced.
104*> If SORT = 'S', SELCTG is used to select eigenvalues to sort
105*> to the top left of the Schur form.
106*> An eigenvalue ALPHA(j)/BETA(j) is selected if
107*> SELCTG(ALPHA(j),BETA(j)) is true.
108*>
109*> Note that a selected complex eigenvalue may no longer satisfy
110*> SELCTG(ALPHA(j),BETA(j)) = .TRUE. after ordering, since
111*> ordering may change the value of complex eigenvalues
112*> (especially if the eigenvalue is ill-conditioned), in this
113*> case INFO is set to N+2 (See INFO below).
114*> \endverbatim
115*>
116*> \param[in] N
117*> \verbatim
118*> N is INTEGER
119*> The order of the matrices A, B, VSL, and VSR. N >= 0.
120*> \endverbatim
121*>
122*> \param[in,out] A
123*> \verbatim
124*> A is COMPLEX*16 array, dimension (LDA, N)
125*> On entry, the first of the pair of matrices.
126*> On exit, A has been overwritten by its generalized Schur
127*> form S.
128*> \endverbatim
129*>
130*> \param[in] LDA
131*> \verbatim
132*> LDA is INTEGER
133*> The leading dimension of A. LDA >= max(1,N).
134*> \endverbatim
135*>
136*> \param[in,out] B
137*> \verbatim
138*> B is COMPLEX*16 array, dimension (LDB, N)
139*> On entry, the second of the pair of matrices.
140*> On exit, B has been overwritten by its generalized Schur
141*> form T.
142*> \endverbatim
143*>
144*> \param[in] LDB
145*> \verbatim
146*> LDB is INTEGER
147*> The leading dimension of B. LDB >= max(1,N).
148*> \endverbatim
149*>
150*> \param[out] SDIM
151*> \verbatim
152*> SDIM is INTEGER
153*> If SORT = 'N', SDIM = 0.
154*> If SORT = 'S', SDIM = number of eigenvalues (after sorting)
155*> for which SELCTG is true.
156*> \endverbatim
157*>
158*> \param[out] ALPHA
159*> \verbatim
160*> ALPHA is COMPLEX*16 array, dimension (N)
161*> \endverbatim
162*>
163*> \param[out] BETA
164*> \verbatim
165*> BETA is COMPLEX*16 array, dimension (N)
166*> On exit, ALPHA(j)/BETA(j), j=1,...,N, will be the
167*> generalized eigenvalues. ALPHA(j), j=1,...,N and BETA(j),
168*> j=1,...,N are the diagonals of the complex Schur form (A,B)
169*> output by ZGGES. The BETA(j) will be non-negative real.
170*>
171*> Note: the quotients ALPHA(j)/BETA(j) may easily over- or
172*> underflow, and BETA(j) may even be zero. Thus, the user
173*> should avoid naively computing the ratio alpha/beta.
174*> However, ALPHA will be always less than and usually
175*> comparable with norm(A) in magnitude, and BETA always less
176*> than and usually comparable with norm(B).
177*> \endverbatim
178*>
179*> \param[out] VSL
180*> \verbatim
181*> VSL is COMPLEX*16 array, dimension (LDVSL,N)
182*> If JOBVSL = 'V', VSL will contain the left Schur vectors.
183*> Not referenced if JOBVSL = 'N'.
184*> \endverbatim
185*>
186*> \param[in] LDVSL
187*> \verbatim
188*> LDVSL is INTEGER
189*> The leading dimension of the matrix VSL. LDVSL >= 1, and
190*> if JOBVSL = 'V', LDVSL >= N.
191*> \endverbatim
192*>
193*> \param[out] VSR
194*> \verbatim
195*> VSR is COMPLEX*16 array, dimension (LDVSR,N)
196*> If JOBVSR = 'V', VSR will contain the right Schur vectors.
197*> Not referenced if JOBVSR = 'N'.
198*> \endverbatim
199*>
200*> \param[in] LDVSR
201*> \verbatim
202*> LDVSR is INTEGER
203*> The leading dimension of the matrix VSR. LDVSR >= 1, and
204*> if JOBVSR = 'V', LDVSR >= N.
205*> \endverbatim
206*>
207*> \param[out] WORK
208*> \verbatim
209*> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK))
210*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
211*> \endverbatim
212*>
213*> \param[in] LWORK
214*> \verbatim
215*> LWORK is INTEGER
216*> The dimension of the array WORK. LWORK >= max(1,2*N).
217*> For good performance, LWORK must generally be larger.
218*>
219*> If LWORK = -1, then a workspace query is assumed; the routine
220*> only calculates the optimal size of the WORK array, returns
221*> this value as the first entry of the WORK array, and no error
222*> message related to LWORK is issued by XERBLA.
223*> \endverbatim
224*>
225*> \param[out] RWORK
226*> \verbatim
227*> RWORK is DOUBLE PRECISION array, dimension (8*N)
228*> \endverbatim
229*>
230*> \param[out] BWORK
231*> \verbatim
232*> BWORK is LOGICAL array, dimension (N)
233*> Not referenced if SORT = 'N'.
234*> \endverbatim
235*>
236*> \param[out] INFO
237*> \verbatim
238*> INFO is INTEGER
239*> = 0: successful exit
240*> < 0: if INFO = -i, the i-th argument had an illegal value.
241*> =1,...,N:
242*> The QZ iteration failed. (A,B) are not in Schur
243*> form, but ALPHA(j) and BETA(j) should be correct for
244*> j=INFO+1,...,N.
245*> > N: =N+1: other than QZ iteration failed in ZHGEQZ
246*> =N+2: after reordering, roundoff changed values of
247*> some complex eigenvalues so that leading
248*> eigenvalues in the Generalized Schur form no
249*> longer satisfy SELCTG=.TRUE. This could also
250*> be caused due to scaling.
251*> =N+3: reordering failed in ZTGSEN.
252*> \endverbatim
253*
254* Authors:
255* ========
256*
257*> \author Univ. of Tennessee
258*> \author Univ. of California Berkeley
259*> \author Univ. of Colorado Denver
260*> \author NAG Ltd.
261*
262*> \ingroup gges
263*
264* =====================================================================
265 SUBROUTINE zgges( JOBVSL, JOBVSR, SORT, SELCTG, N, A, LDA, B,
266 $ LDB,
267 $ SDIM, ALPHA, BETA, VSL, LDVSL, VSR, LDVSR, WORK,
268 $ LWORK, RWORK, BWORK, INFO )
269*
270* -- LAPACK driver routine --
271* -- LAPACK is a software package provided by Univ. of Tennessee, --
272* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
273*
274* .. Scalar Arguments ..
275 CHARACTER JOBVSL, JOBVSR, SORT
276 INTEGER INFO, LDA, LDB, LDVSL, LDVSR, LWORK, N, SDIM
277* ..
278* .. Array Arguments ..
279 LOGICAL BWORK( * )
280 DOUBLE PRECISION RWORK( * )
281 COMPLEX*16 A( LDA, * ), ALPHA( * ), B( LDB, * ),
282 $ beta( * ), vsl( ldvsl, * ), vsr( ldvsr, * ),
283 $ work( * )
284* ..
285* .. Function Arguments ..
286 LOGICAL SELCTG
287 EXTERNAL SELCTG
288* ..
289*
290* =====================================================================
291*
292* .. Parameters ..
293 DOUBLE PRECISION ZERO, ONE
294 PARAMETER ( ZERO = 0.0d0, one = 1.0d0 )
295 COMPLEX*16 CZERO, CONE
296 parameter( czero = ( 0.0d0, 0.0d0 ),
297 $ cone = ( 1.0d0, 0.0d0 ) )
298* ..
299* .. Local Scalars ..
300 LOGICAL CURSL, ILASCL, ILBSCL, ILVSL, ILVSR, LASTSL,
301 $ LQUERY, WANTST
302 INTEGER I, ICOLS, IERR, IHI, IJOBVL, IJOBVR, ILEFT,
303 $ ilo, iright, irows, irwrk, itau, iwrk, lwkmin,
304 $ lwkopt
305 DOUBLE PRECISION ANRM, ANRMTO, BIGNUM, BNRM, BNRMTO, EPS, PVSL,
306 $ PVSR, SMLNUM
307* ..
308* .. Local Arrays ..
309 INTEGER IDUM( 1 )
310 DOUBLE PRECISION DIF( 2 )
311* ..
312* .. External Subroutines ..
313 EXTERNAL xerbla, zgeqrf, zggbak, zggbal, zgghrd,
314 $ zhgeqz,
316* ..
317* .. External Functions ..
318 LOGICAL LSAME
319 INTEGER ILAENV
320 DOUBLE PRECISION DLAMCH, ZLANGE
321 EXTERNAL lsame, ilaenv, dlamch, zlange
322* ..
323* .. Intrinsic Functions ..
324 INTRINSIC max, sqrt
325* ..
326* .. Executable Statements ..
327*
328* Decode the input arguments
329*
330 IF( lsame( jobvsl, 'N' ) ) THEN
331 ijobvl = 1
332 ilvsl = .false.
333 ELSE IF( lsame( jobvsl, 'V' ) ) THEN
334 ijobvl = 2
335 ilvsl = .true.
336 ELSE
337 ijobvl = -1
338 ilvsl = .false.
339 END IF
340*
341 IF( lsame( jobvsr, 'N' ) ) THEN
342 ijobvr = 1
343 ilvsr = .false.
344 ELSE IF( lsame( jobvsr, 'V' ) ) THEN
345 ijobvr = 2
346 ilvsr = .true.
347 ELSE
348 ijobvr = -1
349 ilvsr = .false.
350 END IF
351*
352 wantst = lsame( sort, 'S' )
353*
354* Test the input arguments
355*
356 info = 0
357 lquery = ( lwork.EQ.-1 )
358 IF( ijobvl.LE.0 ) THEN
359 info = -1
360 ELSE IF( ijobvr.LE.0 ) THEN
361 info = -2
362 ELSE IF( ( .NOT.wantst ) .AND.
363 $ ( .NOT.lsame( sort, 'N' ) ) ) THEN
364 info = -3
365 ELSE IF( n.LT.0 ) THEN
366 info = -5
367 ELSE IF( lda.LT.max( 1, n ) ) THEN
368 info = -7
369 ELSE IF( ldb.LT.max( 1, n ) ) THEN
370 info = -9
371 ELSE IF( ldvsl.LT.1 .OR. ( ilvsl .AND. ldvsl.LT.n ) ) THEN
372 info = -14
373 ELSE IF( ldvsr.LT.1 .OR. ( ilvsr .AND. ldvsr.LT.n ) ) THEN
374 info = -16
375 END IF
376*
377* Compute workspace
378* (Note: Comments in the code beginning "Workspace:" describe the
379* minimal amount of workspace needed at that point in the code,
380* as well as the preferred amount for good performance.
381* NB refers to the optimal block size for the immediately
382* following subroutine, as returned by ILAENV.)
383*
384 IF( info.EQ.0 ) THEN
385 lwkmin = max( 1, 2*n )
386 lwkopt = max( 1, n + n*ilaenv( 1, 'ZGEQRF', ' ', n, 1, n,
387 $ 0 ) )
388 lwkopt = max( lwkopt, n +
389 $ n*ilaenv( 1, 'ZUNMQR', ' ', n, 1, n, -1 ) )
390 IF( ilvsl ) THEN
391 lwkopt = max( lwkopt, n +
392 $ n*ilaenv( 1, 'ZUNGQR', ' ', n, 1, n, -1 ) )
393 END IF
394 work( 1 ) = lwkopt
395*
396 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
397 $ info = -18
398 END IF
399*
400 IF( info.NE.0 ) THEN
401 CALL xerbla( 'ZGGES ', -info )
402 RETURN
403 ELSE IF( lquery ) THEN
404 RETURN
405 END IF
406*
407* Quick return if possible
408*
409 IF( n.EQ.0 ) THEN
410 sdim = 0
411 RETURN
412 END IF
413*
414* Get machine constants
415*
416 eps = dlamch( 'P' )
417 smlnum = dlamch( 'S' )
418 bignum = one / smlnum
419 smlnum = sqrt( smlnum ) / eps
420 bignum = one / smlnum
421*
422* Scale A if max element outside range [SMLNUM,BIGNUM]
423*
424 anrm = zlange( 'M', n, n, a, lda, rwork )
425 ilascl = .false.
426 IF( anrm.GT.zero .AND. anrm.LT.smlnum ) THEN
427 anrmto = smlnum
428 ilascl = .true.
429 ELSE IF( anrm.GT.bignum ) THEN
430 anrmto = bignum
431 ilascl = .true.
432 END IF
433*
434 IF( ilascl )
435 $ CALL zlascl( 'G', 0, 0, anrm, anrmto, n, n, a, lda, ierr )
436*
437* Scale B if max element outside range [SMLNUM,BIGNUM]
438*
439 bnrm = zlange( 'M', n, n, b, ldb, rwork )
440 ilbscl = .false.
441 IF( bnrm.GT.zero .AND. bnrm.LT.smlnum ) THEN
442 bnrmto = smlnum
443 ilbscl = .true.
444 ELSE IF( bnrm.GT.bignum ) THEN
445 bnrmto = bignum
446 ilbscl = .true.
447 END IF
448*
449 IF( ilbscl )
450 $ CALL zlascl( 'G', 0, 0, bnrm, bnrmto, n, n, b, ldb, ierr )
451*
452* Permute the matrix to make it more nearly triangular
453* (Real Workspace: need 6*N)
454*
455 ileft = 1
456 iright = n + 1
457 irwrk = iright + n
458 CALL zggbal( 'P', n, a, lda, b, ldb, ilo, ihi, rwork( ileft ),
459 $ rwork( iright ), rwork( irwrk ), ierr )
460*
461* Reduce B to triangular form (QR decomposition of B)
462* (Complex Workspace: need N, prefer N*NB)
463*
464 irows = ihi + 1 - ilo
465 icols = n + 1 - ilo
466 itau = 1
467 iwrk = itau + irows
468 CALL zgeqrf( irows, icols, b( ilo, ilo ), ldb, work( itau ),
469 $ work( iwrk ), lwork+1-iwrk, ierr )
470*
471* Apply the orthogonal transformation to matrix A
472* (Complex Workspace: need N, prefer N*NB)
473*
474 CALL zunmqr( 'L', 'C', irows, icols, irows, b( ilo, ilo ), ldb,
475 $ work( itau ), a( ilo, ilo ), lda, work( iwrk ),
476 $ lwork+1-iwrk, ierr )
477*
478* Initialize VSL
479* (Complex Workspace: need N, prefer N*NB)
480*
481 IF( ilvsl ) THEN
482 CALL zlaset( 'Full', n, n, czero, cone, vsl, ldvsl )
483 IF( irows.GT.1 ) THEN
484 CALL zlacpy( 'L', irows-1, irows-1, b( ilo+1, ilo ), ldb,
485 $ vsl( ilo+1, ilo ), ldvsl )
486 END IF
487 CALL zungqr( irows, irows, irows, vsl( ilo, ilo ), ldvsl,
488 $ work( itau ), work( iwrk ), lwork+1-iwrk, ierr )
489 END IF
490*
491* Initialize VSR
492*
493 IF( ilvsr )
494 $ CALL zlaset( 'Full', n, n, czero, cone, vsr, ldvsr )
495*
496* Reduce to generalized Hessenberg form
497* (Workspace: none needed)
498*
499 CALL zgghrd( jobvsl, jobvsr, n, ilo, ihi, a, lda, b, ldb, vsl,
500 $ ldvsl, vsr, ldvsr, ierr )
501*
502 sdim = 0
503*
504* Perform QZ algorithm, computing Schur vectors if desired
505* (Complex Workspace: need N)
506* (Real Workspace: need N)
507*
508 iwrk = itau
509 CALL zhgeqz( 'S', jobvsl, jobvsr, n, ilo, ihi, a, lda, b, ldb,
510 $ alpha, beta, vsl, ldvsl, vsr, ldvsr, work( iwrk ),
511 $ lwork+1-iwrk, rwork( irwrk ), ierr )
512 IF( ierr.NE.0 ) THEN
513 IF( ierr.GT.0 .AND. ierr.LE.n ) THEN
514 info = ierr
515 ELSE IF( ierr.GT.n .AND. ierr.LE.2*n ) THEN
516 info = ierr - n
517 ELSE
518 info = n + 1
519 END IF
520 GO TO 30
521 END IF
522*
523* Sort eigenvalues ALPHA/BETA if desired
524* (Workspace: none needed)
525*
526 IF( wantst ) THEN
527*
528* Undo scaling on eigenvalues before selecting
529*
530 IF( ilascl )
531 $ CALL zlascl( 'G', 0, 0, anrm, anrmto, n, 1, alpha, n,
532 $ ierr )
533 IF( ilbscl )
534 $ CALL zlascl( 'G', 0, 0, bnrm, bnrmto, n, 1, beta, n,
535 $ ierr )
536*
537* Select eigenvalues
538*
539 DO 10 i = 1, n
540 bwork( i ) = selctg( alpha( i ), beta( i ) )
541 10 CONTINUE
542*
543 CALL ztgsen( 0, ilvsl, ilvsr, bwork, n, a, lda, b, ldb,
544 $ alpha,
545 $ beta, vsl, ldvsl, vsr, ldvsr, sdim, pvsl, pvsr,
546 $ dif, work( iwrk ), lwork-iwrk+1, idum, 1, ierr )
547 IF( ierr.EQ.1 )
548 $ info = n + 3
549*
550 END IF
551*
552* Apply back-permutation to VSL and VSR
553* (Workspace: none needed)
554*
555 IF( ilvsl )
556 $ CALL zggbak( 'P', 'L', n, ilo, ihi, rwork( ileft ),
557 $ rwork( iright ), n, vsl, ldvsl, ierr )
558 IF( ilvsr )
559 $ CALL zggbak( 'P', 'R', n, ilo, ihi, rwork( ileft ),
560 $ rwork( iright ), n, vsr, ldvsr, ierr )
561*
562* Undo scaling
563*
564 IF( ilascl ) THEN
565 CALL zlascl( 'U', 0, 0, anrmto, anrm, n, n, a, lda, ierr )
566 CALL zlascl( 'G', 0, 0, anrmto, anrm, n, 1, alpha, n, ierr )
567 END IF
568*
569 IF( ilbscl ) THEN
570 CALL zlascl( 'U', 0, 0, bnrmto, bnrm, n, n, b, ldb, ierr )
571 CALL zlascl( 'G', 0, 0, bnrmto, bnrm, n, 1, beta, n, ierr )
572 END IF
573*
574 IF( wantst ) THEN
575*
576* Check if reordering is correct
577*
578 lastsl = .true.
579 sdim = 0
580 DO 20 i = 1, n
581 cursl = selctg( alpha( i ), beta( i ) )
582 IF( cursl )
583 $ sdim = sdim + 1
584 IF( cursl .AND. .NOT.lastsl )
585 $ info = n + 2
586 lastsl = cursl
587 20 CONTINUE
588*
589 END IF
590*
591 30 CONTINUE
592*
593 work( 1 ) = lwkopt
594*
595 RETURN
596*
597* End of ZGGES
598*
599 END
subroutine xerbla(srname, info)
Definition cblat2.f:3285
subroutine zgeqrf(m, n, a, lda, tau, work, lwork, info)
ZGEQRF
Definition zgeqrf.f:144
subroutine zggbak(job, side, n, ilo, ihi, lscale, rscale, m, v, ldv, info)
ZGGBAK
Definition zggbak.f:147
subroutine zggbal(job, n, a, lda, b, ldb, ilo, ihi, lscale, rscale, work, info)
ZGGBAL
Definition zggbal.f:175
subroutine zgges(jobvsl, jobvsr, sort, selctg, n, a, lda, b, ldb, sdim, alpha, beta, vsl, ldvsl, vsr, ldvsr, work, lwork, rwork, bwork, info)
ZGGES computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE m...
Definition zgges.f:269
subroutine zgghrd(compq, compz, n, ilo, ihi, a, lda, b, ldb, q, ldq, z, ldz, info)
ZGGHRD
Definition zgghrd.f:203
subroutine zhgeqz(job, compq, compz, n, ilo, ihi, h, ldh, t, ldt, alpha, beta, q, ldq, z, ldz, work, lwork, rwork, info)
ZHGEQZ
Definition zhgeqz.f:283
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
Definition zlacpy.f:101
subroutine zlascl(type, kl, ku, cfrom, cto, m, n, a, lda, info)
ZLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.
Definition zlascl.f:142
subroutine zlaset(uplo, m, n, alpha, beta, a, lda)
ZLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
Definition zlaset.f:104
subroutine ztgsen(ijob, wantq, wantz, select, n, a, lda, b, ldb, alpha, beta, q, ldq, z, ldz, m, pl, pr, dif, work, lwork, iwork, liwork, info)
ZTGSEN
Definition ztgsen.f:432
subroutine zungqr(m, n, k, a, lda, tau, work, lwork, info)
ZUNGQR
Definition zungqr.f:126
subroutine zunmqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
ZUNMQR
Definition zunmqr.f:165