DGGLSE  -  solve  the  linear  equality-constrained  least
       squares (LSE) problem


SYNOPSIS

       SUBROUTINE DGGLSE( M, N, P, A, LDA, B, LDB, C, D, X, WORK,
                          LWORK, INFO )

           INTEGER        INFO, LDA, LDB, LWORK, M, N, P

           DOUBLE         PRECISION  A( LDA, * ), B( LDB, * ), C(
                          * ), D( * ), WORK( * ), X( * )


PURPOSE

       DGGLSE  solves  the  linear   equality-constrained   least
       squares (LSE) problem:
               minimize || c - A*x ||_2   subject to   B*x = d

       where  A is an M-by-N matrix, B is a P-by-N matrix, c is a
       given M-vector, and d is a given P-vector. It  is  assumed
       that
       P <= N <= M+P, and

                rank(B) = P and  rank( ( A ) ) = N.
                                     ( ( B ) )

       These  conditions ensure that the LSE problem has a unique
       solution, which is obtained using a GRQ  factorization  of
       the matrices B and A.


ARGUMENTS

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

       N       (input) INTEGER
               The  number  of columns of the matrices A and B. N
               >= 0.

       P       (input) INTEGER
               The number of rows of the matrix B. 0 <= P <= N <=
               M+P.

       A       (input/output) DOUBLE PRECISION array, dimension
               (LDA,N)
               On entry, the M-by-N matrix  A.   On  exit,  A  is
               destroyed.

       LDA     (input) INTEGER
               The  leading  dimension  of  the  array  A. LDA >=
               max(1,M).

       B       (input/output) DOUBLE PRECISION array, dimension
               (LDB,N)

               destroyed.

       LDB     (input) INTEGER
               The leading dimension  of  the  array  B.  LDB  >=
               max(1,P).

       C       (input/output) DOUBLE PRECISION array, dimension
               (M)
               On entry, C contains the right  hand  side  vector
               for the least squares part of the LSE problem.  On
               exit, the residual sum of squares for the solution
               is  given  by the sum of squares of elements N-P+1
               to M of vector C.

       D       (input/output) DOUBLE PRECISION array, dimension
               (P)
               On  entry,  D  contains the right hand side vector
               for the  constrained  equation.   On  exit,  D  is
               destroyed.

       X       (output) DOUBLE PRECISION array, dimension (N)
               On exit, X is the solution of the LSE problem.

       WORK     (workspace/output)  DOUBLE  PRECISION  array,
               dimension (LWORK)
               On  exit, if INFO = 0, WORK(1) returns the optimal
               LWORK.

       LWORK   (input) INTEGER
               The  dimension  of  the  array  WORK.   LWORK   >=
               max(1,M+N+P).   For  optimum  performance LWORK >=
               P+min(M,N)+max(M,N)*NB, where NB is an upper bound
               for  the  optimal  blocksizes  for DGEQRF, SGERQF,
               DORMQR and SORMRQ.

               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.

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


Man(1) output converted with man2html