f08 Chapter Contents
f08 Chapter Introduction
NAG Library Manual

# NAG Library Function Documentnag_dgels (f08aac)

## 1  Purpose

nag_dgels (f08aac) solves linear least squares problems of the form
 $minx b-Ax2 or minx b-ATx2 ,$
where $A$ is an $m$ by $n$ real matrix of full rank, using a $QR$ or $LQ$ factorization of $A$.

## 2  Specification

 #include #include
 void nag_dgels (Nag_OrderType order, Nag_TransType trans, Integer m, Integer n, Integer nrhs, double a[], Integer pda, double b[], Integer pdb, NagError *fail)

## 3  Description

The following options are provided:
1. If ${\mathbf{trans}}=\mathrm{Nag_NoTrans}$ and $m\ge n$: find the least squares solution of an overdetermined system, i.e., solve the least squares problem
 $minx b-Ax2 .$
2. If ${\mathbf{trans}}=\mathrm{Nag_NoTrans}$ and $m: find the minimum norm solution of an underdetermined system $Ax=b$.
3. If ${\mathbf{trans}}=\mathrm{Nag_Trans}$ and $m\ge n$: find the minimum norm solution of an undetermined system ${A}^{\mathrm{T}}x=b$.
4. If ${\mathbf{trans}}=\mathrm{Nag_Trans}$ and $m: find the least squares solution of an overdetermined system, i.e., solve the least squares problem
 $minx b-ATx2 .$
Several right-hand side vectors $b$ and solution vectors $x$ can be handled in a single call; they are stored as the columns of the $m$ by $r$ right-hand side matrix $B$ and the $n$ by $r$ solution matrix $X$.

## 4  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

## 5  Arguments

1:     orderNag_OrderTypeInput
On entry: the order argument specifies the two-dimensional storage scheme being used, i.e., row-major ordering or column-major ordering. C language defined storage is specified by ${\mathbf{order}}=\mathrm{Nag_RowMajor}$. See Section 3.2.1.3 in the Essential Introduction for a more detailed explanation of the use of this argument.
Constraint: ${\mathbf{order}}=\mathrm{Nag_RowMajor}$ or $\mathrm{Nag_ColMajor}$.
2:     transNag_TransTypeInput
On entry: if ${\mathbf{trans}}=\mathrm{Nag_NoTrans}$, the linear system involves $A$.
If ${\mathbf{trans}}=\mathrm{Nag_Trans}$, the linear system involves ${A}^{\mathrm{T}}$.
Constraint: ${\mathbf{trans}}=\mathrm{Nag_NoTrans}$ or $\mathrm{Nag_Trans}$.
3:     mIntegerInput
On entry: $m$, the number of rows of the matrix $A$.
Constraint: ${\mathbf{m}}\ge 0$.
4:     nIntegerInput
On entry: $n$, the number of columns of the matrix $A$.
Constraint: ${\mathbf{n}}\ge 0$.
5:     nrhsIntegerInput
On entry: $r$, the number of right-hand sides, i.e., the number of columns of the matrices $B$ and $X$.
Constraint: ${\mathbf{nrhs}}\ge 0$.
6:     a[$\mathit{dim}$]doubleInput/Output
Note: the dimension, dim, of the array a must be at least
• $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{pda}}×{\mathbf{n}}\right)$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}×{\mathbf{pda}}\right)$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
The $\left(i,j\right)$th element of the matrix $A$ is stored in
• ${\mathbf{a}}\left[\left(j-1\right)×{\mathbf{pda}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{a}}\left[\left(i-1\right)×{\mathbf{pda}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On entry: the $m$ by $n$ matrix $A$.
On exit: if ${\mathbf{m}}\ge {\mathbf{n}}$, a is overwritten by details of its $QR$ factorization, as returned by nag_dgeqrf (f08aec).
If ${\mathbf{m}}<{\mathbf{n}}$, a is overwritten by details of its $LQ$ factorization, as returned by nag_dgelqf (f08ahc).
7:     pdaIntegerInput
On entry: the stride separating row or column elements (depending on the value of order) in the array a.
Constraints:
• if ${\mathbf{order}}=\mathrm{Nag_ColMajor}$, ${\mathbf{pda}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$;
• if ${\mathbf{order}}=\mathrm{Nag_RowMajor}$, ${\mathbf{pda}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
8:     b[$\mathit{dim}$]doubleInput/Output
Note: the dimension, dim, of the array b must be at least
• $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{pdb}}×{\mathbf{nrhs}}\right)$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}},{\mathbf{n}}\right)×{\mathbf{pdb}}\right)$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
The $\left(i,j\right)$th element of the matrix $B$ is stored in
• ${\mathbf{b}}\left[\left(j-1\right)×{\mathbf{pdb}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{b}}\left[\left(i-1\right)×{\mathbf{pdb}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On entry: the matrix $B$ of right-hand side vectors, stored in rows or columns; b is $m$ by $r$ if ${\mathbf{trans}}=\mathrm{Nag_NoTrans}$, or $n$ by $r$ if ${\mathbf{trans}}=\mathrm{Nag_Trans}$.
On exit: b is overwritten by the solution vectors, $x$, stored in rows or columns:
• if ${\mathbf{trans}}=\mathrm{Nag_NoTrans}$ and $m\ge n$, or ${\mathbf{trans}}=\mathrm{Nag_Trans}$ and $m, elements $1$ to $\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left(m,n\right)$ 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 $\left(\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left(m,n\right)+1\right)$ to $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(m,n\right)$ in that column;
• otherwise, elements $1$ to $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(m,n\right)$ in each column of b contain the minimum norm solution vectors.
9:     pdbIntegerInput
On entry: the stride separating row or column elements (depending on the value of order) in the array b.
Constraints:
• if ${\mathbf{order}}=\mathrm{Nag_ColMajor}$, ${\mathbf{pdb}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}},{\mathbf{n}}\right)$;
• if ${\mathbf{order}}=\mathrm{Nag_RowMajor}$, ${\mathbf{pdb}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{nrhs}}\right)$.
10:   failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
On entry, argument $⟨\mathit{\text{value}}⟩$ had an illegal value.
NE_FULL_RANK
Diagonal element $⟨\mathit{\text{value}}⟩$ of the triangular factor of $A$ is zero, so that $A$ does not have full rank; the least squares solution could not be computed.
NE_INT
On entry, ${\mathbf{m}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{m}}\ge 0$.
On entry, ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{n}}\ge 0$.
On entry, ${\mathbf{nrhs}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{nrhs}}\ge 0$.
On entry, ${\mathbf{pda}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pda}}>0$.
On entry, ${\mathbf{pdb}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pdb}}>0$.
NE_INT_2
On entry, ${\mathbf{pda}}=⟨\mathit{\text{value}}⟩$ and ${\mathbf{m}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pda}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
On entry, ${\mathbf{pda}}=⟨\mathit{\text{value}}⟩$ and ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pda}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
On entry, ${\mathbf{pdb}}=⟨\mathit{\text{value}}⟩$ and ${\mathbf{nrhs}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pdb}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{nrhs}}\right)$.
NE_INT_3
On entry, ${\mathbf{pdb}}=⟨\mathit{\text{value}}⟩$, ${\mathbf{m}}=⟨\mathit{\text{value}}⟩$ and ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pdb}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}},{\mathbf{n}}\right)$.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.

## 7  Accuracy

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

## 8  Parallelism and Performance

nag_dgels (f08aac) is threaded by NAG for parallel execution in multithreaded implementations of the NAG Library.
nag_dgels (f08aac) makes calls to BLAS and/or LAPACK routines, which may be threaded within the vendor library used by this implementation. Consult the documentation for the vendor library for further information.

The total number of floating-point operations required to factorize $A$ is approximately $\frac{2}{3}{n}^{2}\left(3m-n\right)$ if $m\ge n$ and $\frac{2}{3}{m}^{2}\left(3n-m\right)$ otherwise. Following the factorization the solution for a single vector $x$ requires $\mathit{O}\left(\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left({m}^{2},{n}^{2}\right)\right)$ operations.
The complex analogue of this function is nag_zgels (f08anc).

## 10  Example

This example solves the linear least squares problem
 $minx b-Ax2 ,$
where
 $A = -0.57 -1.28 -0.39 0.25 -1.93 1.08 -0.31 -2.14 2.30 0.24 0.40 -0.35 -1.93 0.64 -0.66 0.08 0.15 0.30 0.15 -2.13 -0.02 1.03 -1.43 0.50 and b= -2.67 -0.55 3.34 -0.77 0.48 4.10 .$
The square root of the residual sum of squares is also output.

### 10.1  Program Text

Program Text (f08aace.c)

### 10.2  Program Data

Program Data (f08aace.d)

### 10.3  Program Results

Program Results (f08aace.r)