CGGGLM(l) LAPACK driver routine (version 1.1) CGGGLM(l)
NAME
CGGGLM - solve a generalized linear regression model (GLM) problem
SYNOPSIS
SUBROUTINE CGGGLM( N, M, P, A, LDA, B, LDB, D, X, Y, WORK, LWORK, INFO )
INTEGER INFO, LDA, LDB, LWORK, M, N, P
COMPLEX A( LDA, * ), B( LDB, * ), D( * ), WORK( * ), X( * ), Y(
* )
PURPOSE
CGGGLM solves a generalized linear regression model (GLM) problem:
minimize y'*y subject to d = A*x + B*y
x,y
using a generalized QR factorization of A and B, where A is an N-by-M
matrix, B is a given N-by-P matrix, and d is given N vector. It is also
assumed that M <= N <= M+P and
rank(A) = M and rank([ A B ]) = N.
Under these assumptions, the constrained equation is always consistent, and
there is a unique solution x and a minimal 2-norm solution y.
In particular, if matrix B is square nonsingular, then the problem GLM is
equivalent to the following weighted linear least squares problem
minimize || inv(B)*(b-A*x) ||
x
where ||.|| is vector 2-norm, and inv(B) denotes the inverse of matrix B.
ARGUMENTS
N (input) INTEGER
The number of rows of the matrices A and B. N >= 0.
M (input) INTEGER
The number of columns of the matrix A. M >= 0.
P (input) INTEGER
The number of columns of the matrix B. P >= 0. Assume that M <= N
<= M+P.
A (input/output) COMPLEX array, dimension (LDA,M)
On entry, the N-by-M matrix A. On exit, A is destroyed.
LDA (input) INTEGER
The leading dimension of the array A. LDA >= max( 1,N ).
B (input/output) COMPLEX array, dimension (LDB,P)
On entry, the N-by-P matrix B. On exit, B is destroyed.
LDB (input) INTEGER
The leading dimension of the array B. LDB >= max( 1,N ).
D (input) COMPLEX array, dimension (N)
On entry, D is the left hand side of the GLM equation. On exit, D
is destroyed.
X (output) COMPLEX array, dimension (M)
Y (output) COMPLEX array, dimension (P) On exit, X and Y are
the solutions of the GLM problem.
WORK (workspace) COMPLEX array, dimension ( LWORK )
On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
LWORK (input) INTEGER
The dimension fo the array WORK. LWORK >= M+P+max(N,M,P). For
optimum performance, LWORK >= M+P+max(N,M,P)*max(NB1,NB2), where
NB1 is the optimal blocksize for the QR factorization of an N-by-M
matrix A. NB2 is the optimal blocksize for the RQ factorization of
an N-by-P matrix B.
INFO (output) INTEGER
= 0: successful exit.
< 0: if INFO = -i, the i-th argument had an illegal value.
Back to the listing of simple driver routines