LA_GM_LINEAR_MODEL
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:
; Define some example coefficient arrays:
a = [[2, 7, 4], $
[5, 1, 3], $
[3, 3, 6], $
[4, 5, 2]]
b = [[-3, 2], $
[1, 5], $
[2, 9], $
[4, 1]]
; Define a sample left-hand side vector D:
d = [-1, 2, -3, 4]
; Find and print the solution x:
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
5.6 |
Introduced |
Resources and References
For details see Anderson et al., LAPACK Users' Guide, 3rd ed., SIAM, 1999.