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 mnm+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.

See Also


LA_LEAST_SQUARE_EQUALITY, LA_LEAST_SQUARES