hide long namesshow long names
hide short namesshow short names
Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

NAG Toolbox: nag_lapack_dgels (f08aa)

Purpose

nag_lapack_dgels (f08aa) solves linear least squares problems of the form
min bAx2  or  min bATx2,
x x
minx b-Ax2   or   minx b-ATx2 ,
where AA is an mm by nn real matrix of full rank, using a QRQR or LQLQ factorization of AA.

Syntax

[a, b, info] = f08aa(trans, a, b, 'm', m, 'n', n, 'nrhs_p', nrhs_p)
[a, b, info] = nag_lapack_dgels(trans, a, b, 'm', m, 'n', n, 'nrhs_p', nrhs_p)

Description

The following options are provided:
  1. If trans = 'N'trans='N' and mnmn: find the least squares solution of an overdetermined system, i.e., solve the least squares problem
    min bAx2.
    x
    minx b-Ax2 .
  2. If trans = 'N'trans='N' and m < nm<n: find the minimum norm solution of an underdetermined system Ax = bAx=b.
  3. If trans = 'T'trans='T' and mnmn: find the minimum norm solution of an undetermined system ATx = bATx=b.
  4. If trans = 'T'trans='T' and m < nm<n: find the least squares solution of an overdetermined system, i.e., solve the least squares problem
    min bATx2.
    x
    minx b-ATx2 .
Several right-hand side vectors bb and solution vectors xx can be handled in a single call; they are stored as the columns of the mm by rr right-hand side matrix BB and the nn by rr solution matrix XX.

References

Anderson E, Bai Z, Bischof C, Blackford S, Demmel J, Dongarra J J, Du Croz J J, Greenbaum A, Hammarling S, McKenney A and Sorensen D (1999) LAPACK Users' Guide (3rd Edition) SIAM, Philadelphia http://www.netlib.org/lapack/lug
Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore

Parameters

Compulsory Input Parameters

1:     trans – string (length ≥ 1)
If trans = 'N'trans='N', the linear system involves AA.
If trans = 'T'trans='T', the linear system involves ATAT.
Constraint: trans = 'N'trans='N' or 'T''T'.
2:     a(lda, : :) – double array
The first dimension of the array a must be at least max (1,m)max(1,m)
The second dimension of the array must be at least max (1,n)max(1,n)
The mm by nn matrix AA.
3:     b(ldb, : :) – double array
The first dimension of the array b must be at least max (1,m,n)max(1,m,n)
The second dimension of the array must be at least max (1,nrhs)max(1,nrhs)
The matrix BB of right-hand side vectors, stored in columns; b is mm by rr if trans = 'N'trans='N', or nn by rr if trans = 'T'trans='T'.

Optional Input Parameters

1:     m – int64int32nag_int scalar
Default: The first dimension of the array a.
mm, the number of rows of the matrix AA.
Constraint: m0m0.
2:     n – int64int32nag_int scalar
Default: The second dimension of the array a.
nn, the number of columns of the matrix AA.
Constraint: n0n0.
3:     nrhs_p – int64int32nag_int scalar
Default: The second dimension of the array b.
rr, the number of right-hand sides, i.e., the number of columns of the matrices BB and XX.
Constraint: nrhs0nrhs0.

Input Parameters Omitted from the MATLAB Interface

lda ldb work lwork

Output Parameters

1:     a(lda, : :) – double array
The first dimension of the array a will be max (1,m)max(1,m)
The second dimension of the array will be max (1,n)max(1,n)
ldamax (1,m)ldamax(1,m).
If mnmn, a stores details of its QRQR factorization, as returned by nag_lapack_dgeqrf (f08ae).
If m < nm<n, a stores details of its LQLQ factorization, as returned by nag_lapack_dgelqf (f08ah).
2:     b(ldb, : :) – double array
The first dimension of the array b will be max (1,m,n)max(1,m,n)
The second dimension of the array will be max (1,nrhs)max(1,nrhs)
ldbmax (1,m,n)ldbmax(1,m,n).
b stores the solution vectors, xx, stored in columns:
  • if trans = 'N'trans='N' and mnmn, or trans = 'T'trans='T' and m < nm<n, elements 11 to min (m,n)min(m,n) in each column of b contain the least squares solution vectors; the residual sum of squares for the solution is given by the sum of squares of the modulus of elements (min (m,n) + 1) ( min(m,n)+1 ) to max (m,n)max(m,n) in that column;
  • otherwise, elements 11 to max (m,n)max(m,n) in each column of b contain the minimum norm solution vectors.
3:     info – int64int32nag_int scalar
info = 0info=0 unless the function detects an error (see Section [Error Indicators and Warnings]).

Error Indicators and Warnings

Cases prefixed with W are classified as warnings and do not generate an error of type NAG:error_n. See nag_issue_warnings.

  info = iinfo=-i
If info = iinfo=-i, parameter ii had an illegal value on entry. The parameters are numbered as follows:
1: trans, 2: m, 3: n, 4: nrhs_p, 5: a, 6: lda, 7: b, 8: ldb, 9: work, 10: lwork, 11: info.
It is possible that info refers to a parameter that is omitted from the MATLAB interface. This usually indicates that an error in one of the other input parameters has caused an incorrect value to be inferred.
W INFO > 0INFO>0
If info = iinfo=i, diagonal element ii of the triangular factor of AA is zero, so that AA does not have full rank; the least squares solution could not be computed.

Accuracy

See Section 4.5 of Anderson et al. (1999) for details of error bounds.

Further Comments

The total number of floating point operations required to factorize AA is approximately (2/3) n2 (3mn) 23 n2 (3m-n)  if mnmn and (2/3) m2 (3nm) 23 m2 (3n-m)  otherwise. Following the factorization the solution for a single vector xx requires O(min (m2,n2)) O( min(m2,n2) )  operations.
The complex analogue of this function is nag_lapack_zgels (f08an).

Example

function nag_lapack_dgels_example
trans = 'No transpose';
a = [-0.57, -1.28, -0.39, 0.25;
     -1.93, 1.08, -0.31, -2.14;
     2.3, 0.24, 0.4, -0.35;
     -1.93, 0.64, -0.66, 0.08;
     0.15, 0.3, 0.15, -2.13;
     -0.02, 1.03, -1.43, 0.5];
b = [-2.67;
     -0.55;
     3.34;
     -0.77;
     0.48;
     4.1];
[aOut, bOut, info] = nag_lapack_dgels(trans, a, b)
 

aOut =

    3.6177   -0.5566    0.8474    0.7460
    0.4609   -2.0281    0.5514    1.1700
   -0.5492   -0.0457    1.3745   -1.4105
    0.4609    0.2828    0.0044   -2.3755
   -0.0358    0.0796   -0.0773   -0.5214
    0.0048    0.3003    0.8017    0.2558


bOut =

    1.5339
    1.8707
   -1.5241
    0.0392
   -0.0085
    0.0204


info =

                    0


function f08aa_example
trans = 'No transpose';
a = [-0.57, -1.28, -0.39, 0.25;
     -1.93, 1.08, -0.31, -2.14;
     2.3, 0.24, 0.4, -0.35;
     -1.93, 0.64, -0.66, 0.08;
     0.15, 0.3, 0.15, -2.13;
     -0.02, 1.03, -1.43, 0.5];
b = [-2.67;
     -0.55;
     3.34;
     -0.77;
     0.48;
     4.1];
[aOut, bOut, info] = f08aa(trans, a, b)
 

aOut =

    3.6177   -0.5566    0.8474    0.7460
    0.4609   -2.0281    0.5514    1.1700
   -0.5492   -0.0457    1.3745   -1.4105
    0.4609    0.2828    0.0044   -2.3755
   -0.0358    0.0796   -0.0773   -0.5214
    0.0048    0.3003    0.8017    0.2558


bOut =

    1.5339
    1.8707
   -1.5241
    0.0392
   -0.0085
    0.0204


info =

                    0



PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2013