[/ 

THIS FILE IS AUTOMATICALLY GENERATED, PLEASE DO NOT EDIT!

]

[section ggglm]

[heading Prototype]
There is one prototype of `ggglm` available, please see below.
``
ggglm( MatrixA& a, MatrixB& b, VectorD& d, VectorX& x, VectorY& y );
``


[heading Description]

`ggglm` (short for $FRIENDLY_NAME) provides a C++
interface to LAPACK routines SGGGLM, DGGGLM, CGGGLM, and ZGGGLM. 
`ggglm` solves a general Gauss-Markov linear model (GLM) problem:

minimize || y ||_2 subject to d = A*x + B*y
x

where A is an N-by-M matrix, B is an N-by-P matrix, and d is a
given N-vector. It is 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, which is obtained using a generalized QR factorization
of the matrices (A, B) given by

A = Q*(R), B = Q*T*Z.
(0)

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)*(d-A*x) ||_2
x

where inv(B) denotes the inverse of B.

The selection of the LAPACK routine is done during compile-time, 
and is determined by the type of values contained in type `MatrixA`.
The type of values is obtained through the `value_type` meta-function
 `typename value_type<MatrixA>::type`.
The dispatching table below illustrates to which specific routine 
the code path will be generated. 

[table Dispatching of ggglm
[  [ Value type of MatrixA ] [LAPACK routine] ]
[  [`float`][SGGGLM] ]
[  [`double`][DGGGLM] ]
[  [`complex<float>`][CGGGLM] ]
[  [`complex<double>`][ZGGGLM] ]

]


[heading Definition]
Defined in header [headerref boost/numeric/bindings/lapack/driver/ggglm.hpp].


[heading Parameters or Requirements on Types]

[variablelist Parameters
    [[MatrixA] [The definition of term 1]]
    [[MatrixB] [The definition of term 2]]
    [[MatrixC] [
    The definition of term 3.

    Definitions may contain paragraphs.
    ]]
]


[heading Complexity]


[heading Example]
``
#include <boost/numeric/bindings/lapack/driver/ggglm.hpp>
using namespace boost::numeric::bindings;

lapack::ggglm( x, y, z );

``

this will output

``
[5] 0 1 2 3 4 5
``



[heading Notes]


[heading See Also]

* Originating Fortran source files [@http://www.netlib.org/lapack/single/sggglm.f sggglm.f], [@http://www.netlib.org/lapack/double/dggglm.f dggglm.f], [@http://www.netlib.org/lapack/complex/cggglm.f cggglm.f], and [@http://www.netlib.org/lapack/complex16/zggglm.f zggglm.f] at Netlib.

[endsect]
