ZGEBRD(l)		LAPACK routine (version	1.1)		    ZGEBRD(l)

NAME
  ZGEBRD - reduce a general complex M-by-N matrix A to upper or	lower bidiag-
  onal form B by a unitary transformation

SYNOPSIS

  SUBROUTINE ZGEBRD( M,	N, A, LDA, D, E, TAUQ, TAUP, WORK, LWORK, INFO )

      INTEGER	     INFO, LDA,	LWORK, M, N

      DOUBLE	     PRECISION D( * ), E( * )

      COMPLEX*16     A(	LDA, * ), TAUP(	* ), TAUQ( * ),	WORK( LWORK )

PURPOSE
  ZGEBRD reduces a general complex M-by-N matrix A to upper or lower bidiago-
  nal form B by	a unitary transformation: Q**H * A * P = B.

  If m >= n, B is upper	bidiagonal; if m < n, B	is lower bidiagonal.

ARGUMENTS

  M	  (input) INTEGER
	  The number of	rows in	the matrix A.  M >= 0.

  N	  (input) INTEGER
	  The number of	columns	in the matrix A.  N >= 0.

  A	  (input/output) COMPLEX*16 array, dimension (LDA,N)
	  On entry, the	M-by-N general matrix to be reduced.  On exit, if m
	  >= n,	the diagonal and the first superdiagonal are overwritten with
	  the upper bidiagonal matrix B; the elements below the	diagonal,
	  with the array TAUQ, represent the unitary matrix Q as a product of
	  elementary reflectors, and the elements above	the first superdiago-
	  nal, with the	array TAUP, represent the unitary matrix P as a	pro-
	  duct of elementary reflectors; if m <	n, the diagonal	and the	first
	  subdiagonal are overwritten with the lower bidiagonal	matrix B; the
	  elements below the first subdiagonal,	with the array TAUQ,
	  represent the	unitary	matrix Q as a product of elementary reflec-
	  tors,	and the	elements above the diagonal, with the array TAUP,
	  represent the	unitary	matrix P as a product of elementary reflec-
	  tors.	 See Further Details.  LDA     (input) INTEGER The leading
	  dimension of the array A.  LDA >= max(1,M).

  D	  (output) DOUBLE PRECISION array, dimension (min(M,N))
	  The diagonal elements	of the bidiagonal matrix B: D(i) = A(i,i).

  E	  (output) DOUBLE PRECISION array, dimension (min(M,N)-1)
	  The off-diagonal elements of the bidiagonal matrix B:	if m >=	n,
	  E(i) = A(i,i+1) for i	= 1,2,...,n-1; if m < n, E(i) =	A(i+1,i) for
	  i = 1,2,...,m-1.

  TAUQ	  (output) COMPLEX*16 array dimension (min(M,N))
	  The scalar factors of	the elementary reflectors which	represent the
	  unitary matrix Q. See	Further	Details.  TAUP	  (output) COMPLEX*16
	  array, dimension (min(M,N)) The scalar factors of the	elementary
	  reflectors which represent the unitary matrix	P. See Further
	  Details.  WORK    (workspace)	COMPLEX*16 array, dimension (LWORK)
	  On exit, if INFO = 0,	WORK(1)	returns	the optimal LWORK.

  LWORK	  (input) INTEGER
	  The length of	the array WORK.	 LWORK >= max(1,M,N).  For optimum
	  performance LWORK >= (M+N)*NB, where NB is the optimal blocksize.

  INFO	  (output) INTEGER
	  = 0:	successful exit.
	  < 0:	if INFO	= -i, the i-th argument	had an illegal value.

FURTHER	DETAILS
  The matrices Q and P are represented as products of elementary reflectors:

  If m >= n,

     Q = H(1) H(2) . . . H(n)  and  P =	G(1) G(2) . . .	G(n-1)

  Each H(i) and	G(i) has the form:

     H(i) = I -	tauq * v * v'  and G(i)	= I - taup * u * u'

  where	tauq and taup are complex scalars, and v and u are complex vectors;
  v(1:i-1) = 0,	v(i) = 1, and v(i+1:m) is stored on exit in A(i+1:m,i);
  u(1:i) = 0, u(i+1) = 1, and u(i+2:n) is stored on exit in A(i,i+2:n);	tauq
  is stored in TAUQ(i) and taup	in TAUP(i).

  If m < n,

     Q = H(1) H(2) . . . H(m-1)	 and  P	= G(1) G(2) . .	. G(m)

  Each H(i) and	G(i) has the form:

     H(i) = I -	tauq * v * v'  and G(i)	= I - taup * u * u'

  where	tauq and taup are complex scalars, and v and u are complex vectors;
  v(1:i) = 0, v(i+1) = 1, and v(i+2:m) is stored on exit in A(i+2:m,i);
  u(1:i-1) = 0,	u(i) = 1, and u(i+1:n) is stored on exit in A(i,i+1:n);	tauq
  is stored in TAUQ(i) and taup	in TAUP(i).

  The contents of A on exit are	illustrated by the following examples:

  m = 6	and n =	5 (m > n):	    m =	5 and n	= 6 (m < n):

    (  d   e   u1  u1  u1 )	      (	 d   u1	 u1  u1	 u1  u1	)
    (  v1  d   e   u2  u2 )	      (	 e   d	 u2  u2	 u2  u2	)
    (  v1  v2  d   e   u3 )	      (	 v1  e	 d   u3	 u3  u3	)
    (  v1  v2  v3  d   e  )	      (	 v1  v2	 e   d	 u4  u4	)
    (  v1  v2  v3  v4  d  )	      (	 v1  v2	 v3  e	 d   u5	)
    (  v1  v2  v3  v4  v5 )

  where	d and e	denote diagonal	and off-diagonal elements of B,	vi denotes an
  element of the vector	defining H(i), and ui an element of the	vector defin-
  ing G(i).


Back to the listing of computational routines for orthogonal factorization and singular value decomposition