Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

Chapter Contents
Chapter Introduction
NAG Toolbox

# NAG Toolbox: nag_lapack_dggglm (f08zb)

## Purpose

nag_lapack_dggglm (f08zb) solves a real general Gauss–Markov linear (least squares) model problem.

## Syntax

[a, b, d, x, y, info] = f08zb(a, b, d, 'm', m, 'n', n, 'p', p)
[a, b, d, x, y, info] = nag_lapack_dggglm(a, b, d, 'm', m, 'n', n, 'p', p)

## Description

nag_lapack_dggglm (f08zb) solves the real general Gauss–Markov linear model (GLM) problem
 $minimize x y2 subject to d=Ax+By$
where $A$ is an $m$ by $n$ matrix, $B$ is an $m$ by $p$ matrix and $d$ is an $m$ element vector. It is assumed that $n\le m\le n+p$, $\mathrm{rank}\left(A\right)=n$ and $\mathrm{rank}\left(E\right)=m$, where $E=\left(\begin{array}{cc}A& B\end{array}\right)$. Under these assumptions, the problem has a unique solution $x$ and a minimal $2$-norm solution $y$, which is obtained using a generalized $QR$ factorization of the matrices $A$ and $B$.
In particular, if the matrix $B$ is square and nonsingular, then the GLM problem is equivalent to the weighted linear least squares problem
 $minimize x B-1 d-Ax 2 .$

## 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
Anderson E, Bai Z and Dongarra J (1992) Generalized QR factorization and its applications Linear Algebra Appl. (Volume 162–164) 243–271

## Parameters

### Compulsory Input Parameters

1:     $\mathrm{a}\left(\mathit{lda},:\right)$ – double array
The first dimension of the array a must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
The second dimension of the array a must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
The $m$ by $n$ matrix $A$.
2:     $\mathrm{b}\left(\mathit{ldb},:\right)$ – double array
The first dimension of the array b must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
The second dimension of the array b must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{p}}\right)$.
The $m$ by $p$ matrix $B$.
3:     $\mathrm{d}\left({\mathbf{m}}\right)$ – double array
The left-hand side vector $d$ of the GLM equation.

### Optional Input Parameters

1:     $\mathrm{m}$int64int32nag_int scalar
Default: the dimension of the array d and the first dimension of the array b. (An error is raised if these dimensions are not equal.)
$m$, the number of rows of the matrices $A$ and $B$.
Constraint: ${\mathbf{m}}\ge 0$.
2:     $\mathrm{n}$int64int32nag_int scalar
Default: the second dimension of the array a.
$n$, the number of columns of the matrix $A$.
Constraint: $0\le {\mathbf{n}}\le {\mathbf{m}}$.
3:     $\mathrm{p}$int64int32nag_int scalar
Default: the second dimension of the array b.
$p$, the number of columns of the matrix $B$.
Constraint: ${\mathbf{p}}\ge {\mathbf{m}}-{\mathbf{n}}$.

### Output Parameters

1:     $\mathrm{a}\left(\mathit{lda},:\right)$ – double array
The first dimension of the array a will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
The second dimension of the array a will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
2:     $\mathrm{b}\left(\mathit{ldb},:\right)$ – double array
The first dimension of the array b will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
The second dimension of the array b will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{p}}\right)$.
3:     $\mathrm{d}\left({\mathbf{m}}\right)$ – double array
4:     $\mathrm{x}\left({\mathbf{n}}\right)$ – double array
The solution vector $x$ of the GLM problem.
5:     $\mathrm{y}\left({\mathbf{p}}\right)$ – double array
The solution vector $y$ of the GLM problem.
6:     $\mathrm{info}$int64int32nag_int scalar
${\mathbf{info}}=0$ unless the function detects an error (see Error Indicators and Warnings).

## Error Indicators and Warnings

${\mathbf{info}}=-i$
If ${\mathbf{info}}=-i$, parameter $i$ had an illegal value on entry. The parameters are numbered as follows:
1: m, 2: n, 3: p, 4: a, 5: lda, 6: b, 7: ldb, 8: d, 9: x, 10: y, 11: work, 12: lwork, 13: 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.
${\mathbf{info}}=1$
The upper triangular factor $R$ associated with $A$ in the generalized $RQ$ factorization of the pair $\left(A,B\right)$ is singular, so that $\mathrm{rank}\left(A\right); the least squares solution could not be computed.
${\mathbf{info}}=2$
The bottom $\left(N-M\right)$ by $\left(N-M\right)$ part of the upper trapezoidal factor $T$ associated with $B$ in the generalized $QR$ factorization of the pair $\left(A,B\right)$ is singular, so that $\mathrm{rank}\left(\begin{array}{cc}A& B\end{array}\right); the least squares solutions could not be computed.

## Accuracy

For an error analysis, see Anderson et al. (1992). See also Section 4.6 of Anderson et al. (1999).

When $p=m\ge n$, the total number of floating-point operations is approximately $\frac{2}{3}\left(2{m}^{3}-{n}^{3}\right)+4n{m}^{2}$; when $p=m=n$, the total number of floating-point operations is approximately $\frac{14}{3}{m}^{3}$.

## Example

This example solves the weighted least squares problem
 $minimize x B-1 d-Ax 2 ,$
where
 $B = 0.5 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 2.0 0.0 0.0 0.0 0.0 5.0 , d= 1.32 -4.00 5.52 3.24 and A= -0.57 -1.28 -0.39 -1.93 1.08 -0.31 2.30 0.24 -0.40 -0.02 1.03 -1.43 .$
```function f08zb_example

fprintf('f08zb example results\n\n');

% Minimize ||y|| given Ax + By = d
a = [-0.57, -1.28, -0.39;
-1.93,  1.08, -0.31;
2.30,  0.24, -0.40;
-0.02,  1.03, -1.43];
b = [ 0.5, 0, 0, 0;
0,   1, 0, 0;
0,   0, 2, 0;
0,   0, 0, 5];
d = [ 1.32;
-4.00;
5.52;
3.24];

[~, ~, ~, x, y, info] = f08zb( ...
a, b, d);

disp('Weighted least-squares solution');
fprintf('%12.4f',x);
fprintf('\n');
fprintf('Residual vector\n  ');
fprintf('%12.2e',y);
sqres = norm(y,2);
fprintf('\n\nSquare root of the residual sum of squares\n  %12.2e\n', ...
sqres);

```
```f08zb example results

Weighted least-squares solution
1.9889     -1.0058     -2.9911
Residual vector
-6.37e-04   -2.45e-03   -4.72e-03    7.70e-03

Square root of the residual sum of squares
9.38e-03
```