The LA_GM_LINEAR_MODEL function is used to solve a general Gauss-Markov linear model problem:
minimizex||y||2 with constraint d = Ax + By
where A is an m-column by n-row array, B is a p-column by n-row array, and d is an n-element input vector with m ≤ n ≤ m+p.
The following items should be noted:
- If A has full column rank m and the array (A B) has full row rank n, then there is a unique solution x and a minimal 2-norm solution y.
- If B is square and nonsingular then the problem is equivalent to a weighted linear least-squares problem, minimizex ||B -1(Ax - d)||2.
- If B is the identity matrix then the problem reduces to the ordinary linear least-squares problem, minimizex ||Ax - d||2.
LA_ GM_LINEAR_MODEL is based on the following LAPACK routines:
Output Type |
LAPACK Routine |
Float |
sggglm |
Double |
dggglm |
Complex |
cggglm |
Double complex |
zggglm |
Examples
Given the constraint equation d = Ax + By, (where A, B, and d are defined in the program below) the following example program solves the general Gauss-Markov problem:
a = [[2, 7, 4], $
[5, 1, 3], $
[3, 3, 6], $
[4, 5, 2]]
b = [[-3, 2], $
[1, 5], $
[2, 9], $
[4, 1]]
d = [-1, 2, -3, 4]
x = LA_GM_LINEAR_MODEL(a, b, d, y)
PRINT, 'LA_GM_LINEAR_MODEL solution:'
PRINT, X
PRINT, 'LA_GM_LINEAR_MODEL 2-norm solution:'
PRINT, Y
When this program is compiled and run, IDL prints:
LA_GM_LINEAR_MODEL solution:
1.04668 0.350346 -1.28445
LA_GM_LINEAR_MODEL 2-norm solution:
0.151716 0.0235733
Syntax
Result = LA_GM_LINEAR_MODEL( A, B, D, Y [, /DOUBLE] [, STATUS=variable] )
Return Value
The result (x) is an m-element vector whose type is identical to A.
Arguments
A
The m-by-n array used in the constraint equation.
B
The p-by-n array used in the constraint equation.
D
An n-element input vector used in the constraint equation.
Y
Set this argument to a named variable, which will contain the p-element output vector.
Keywords
DOUBLE
Set this keyword to use double-precision for computations and to return a double-precision (real or complex) result. Set DOUBLE = 0 to use single-precision for computations and to return a single-precision (real or complex) result. The default is /DOUBLE if A is double precision, otherwise the default is DOUBLE = 0.
STATUS
Set this keyword to a named variable that will contain the status of the computation. Possible values are:
- STATUS = 0: The computation was successful.
- STATUS = 1: The factorization of B is singular, so rank(B) < p. No least squares solution can be computed.
- STATUS = 2: The factorization of A is singular, so rank(AB)< n. No least squares solution can be computed.
- STATUS < 0: One of the input arguments had an illegal value.
Note: If STATUS is not specified, any error messages will output to the screen.
Version History
Resources and References
For details see Anderson et al., LAPACK Users' Guide, 3rd ed., SIAM, 1999.
See Also
LA_LEAST_SQUARE_EQUALITY, LA_LEAST_SQUARES