DGEBRD(l)		LAPACK routine (version	1.1)		    DGEBRD(l)

NAME
  DGEBRD - reduce a general real M-by-N	matrix A to upper or lower bidiagonal
  form B by an orthogonal transformation

SYNOPSIS

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

      INTEGER	     INFO, LDA,	LWORK, M, N

      DOUBLE	     PRECISION A( LDA, * ), D( * ), E( * ), TAUP( * ), TAUQ(
		     * ), WORK(	LWORK )

PURPOSE
  DGEBRD reduces a general real	M-by-N matrix A	to upper or lower bidiagonal
  form B by an orthogonal transformation: Q**T * 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) DOUBLE	PRECISION 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 orthogonal	matrix Q as a product
	  of elementary	reflectors, and	the elements above the first superdi-
	  agonal, with the array TAUP, represent the orthogonal	matrix P as a
	  product 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	orthogonal matrix Q as a product of elementary
	  reflectors, and the elements above the diagonal, with	the array
	  TAUP,	represent the orthogonal matrix	P as a product of elementary
	  reflectors.  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) DOUBLE PRECISION array dimension (min(M,N))
	  The scalar factors of	the elementary reflectors which	represent the
	  orthogonal matrix Q. See Further Details.  TAUP    (output) DOUBLE
	  PRECISION array, dimension (min(M,N))	The scalar factors of the
	  elementary reflectors	which represent	the orthogonal matrix P. See
	  Further Details.  WORK    (workspace)	DOUBLE PRECISION 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 real scalars,	and v and u are	real 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 real scalars,	and v and u are	real 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