﻿ f08aa Method
f08aa solves linear least squares problems of the form
 $minxb-Ax2 or minxb-ATx2,$
where $A$ is an $m$ by $n$ real matrix of full rank, using a $QR$ or $LQ$ factorization of $A$.

# Syntax

C#
```public static void f08aa(
string trans,
int m,
int n,
int nrhs,
double[,] a,
double[,] b,
out int info
)```
Visual Basic
```Public Shared Sub f08aa ( _
trans As String, _
m As Integer, _
n As Integer, _
nrhs As Integer, _
a As Double(,), _
b As Double(,), _
<OutAttribute> ByRef info As Integer _
)```
Visual C++
```public:
static void f08aa(
String^ trans,
int m,
int n,
int nrhs,
array<double,2>^ a,
array<double,2>^ b,
[OutAttribute] int% info
)```
F#
```static member f08aa :
trans : string *
m : int *
n : int *
nrhs : int *
a : float[,] *
b : float[,] *
info : int byref -> unit
```

#### Parameters

trans
Type: System..::..String
On entry: if ${\mathbf{trans}}=\text{"N"}$, the linear system involves $A$.
If ${\mathbf{trans}}=\text{"T"}$, the linear system involves ${A}^{\mathrm{T}}$.
Constraint: ${\mathbf{trans}}=\text{"N"}$ or $\text{"T"}$.
m
Type: System..::..Int32
On entry: $m$, the number of rows of the matrix $A$.
Constraint: ${\mathbf{m}}\ge 0$.
n
Type: System..::..Int32
On entry: $n$, the number of columns of the matrix $A$.
Constraint: ${\mathbf{n}}\ge 0$.
nrhs
Type: System..::..Int32
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$.
a
Type: array<System..::..Double,2>[,](,)[,][,]
An array of size [dim1, dim2]
Note: dim1 must satisfy the constraint: $\mathrm{dim1}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$
Note: the second dimension of the array a must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
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 f08ae.
If ${\mathbf{m}}<{\mathbf{n}}$, a is overwritten by details of its $LQ$ factorization, as returned by f08ah.
b
Type: array<System..::..Double,2>[,](,)[,][,]
An array of size [dim1, dim2]
Note: dim1 must satisfy the constraint: $\mathrm{dim1}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}},{\mathbf{n}}\right)$
Note: the second dimension of the array b must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{nrhs}}\right)$.
On entry: the matrix $B$ of right-hand side vectors, stored in columns; b is $m$ by $r$ if ${\mathbf{trans}}=\text{"N"}$, or $n$ by $r$ if ${\mathbf{trans}}=\text{"T"}$.
On exit: b is overwritten by the solution vectors, $x$, stored in columns:
• if ${\mathbf{trans}}=\text{"N"}$ and $m\ge n$, or ${\mathbf{trans}}=\text{"T"}$ 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.
info
Type: System..::..Int32%
On exit: ${\mathbf{info}}=0$ unless the method detects an error (see [Error Indicators and Warnings]).

# Description

The following options are provided:
1. If ${\mathbf{trans}}=\text{"N"}$ and $m\ge n$: find the least squares solution of an overdetermined system, i.e., solve the least squares problem
 $minxb-Ax2.$
2. If ${\mathbf{trans}}=\text{"N"}$ and $m: find the minimum norm solution of an underdetermined system $Ax=b$.
3. If ${\mathbf{trans}}=\text{"T"}$ and $m\ge n$: find the minimum norm solution of an undetermined system ${A}^{\mathrm{T}}x=b$.
4. If ${\mathbf{trans}}=\text{"T"}$ and $m: find the least squares solution of an overdetermined system, i.e., solve the least squares problem
 $minxb-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$.

# 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

# Error Indicators and Warnings

Some error messages may refer to parameters that are dropped from this interface (LDA, LDB) In these cases, an error in another parameter has usually caused an incorrect value to be inferred.
${\mathbf{info}}<0$
If ${\mathbf{info}}=-i$, argument $i$ had an illegal value. An explanatory message is output, and execution of the program is terminated.
${\mathbf{info}}>0$
If ${\mathbf{info}}=i$, diagonal element $i$ of the triangular factor of $A$ is zero, so that $A$ does not have full rank; the least squares solution could not be computed.
${\mathbf{ifail}}=-9000$
An error occured, see message report.
${\mathbf{ifail}}=-6000$
Invalid Parameters $〈\mathit{\text{value}}〉$
${\mathbf{ifail}}=-4000$
Invalid dimension for array $〈\mathit{\text{value}}〉$
${\mathbf{ifail}}=-8000$
Negative dimension for array $〈\mathit{\text{value}}〉$
${\mathbf{ifail}}=-6000$
Invalid Parameters $〈\mathit{\text{value}}〉$
${\mathbf{ifail}}=-6000$
Invalid Parameters $〈\mathit{\text{value}}〉$

# Accuracy

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

# Parallelism and Performance

None.

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 method is f08an.

# Example

This example solves the linear least squares problem
 $minxb-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.

Example program (C#): f08aae.cs

Example program data: f08aae.d

Example program results: f08aae.r