# NAG FL Interfacef08acf (dgemqrt)

## ▸▿ Contents

Settings help

FL Name Style:

FL Specification Language:

## 1Purpose

f08acf multiplies an arbitrary real matrix $C$ by the real orthogonal matrix $Q$ from a $QR$ factorization computed by f08abf.

## 2Specification

Fortran Interface
 Subroutine f08acf ( side, m, n, k, nb, v, ldv, t, ldt, c, ldc, work, info)
 Integer, Intent (In) :: m, n, k, nb, ldv, ldt, ldc Integer, Intent (Out) :: info Real (Kind=nag_wp), Intent (In) :: t(ldt,*) Real (Kind=nag_wp), Intent (Inout) :: v(ldv,*), c(ldc,*), work(*) Character (1), Intent (In) :: side, trans
#include <nag.h>
 void f08acf_ (const char *side, const char *trans, const Integer *m, const Integer *n, const Integer *k, const Integer *nb, double v[], const Integer *ldv, const double t[], const Integer *ldt, double c[], const Integer *ldc, double work[], Integer *info, const Charlen length_side, const Charlen length_trans)
The routine may be called by the names f08acf, nagf_lapackeig_dgemqrt or its LAPACK name dgemqrt.

## 3Description

f08acf is intended to be used after a call to f08abf which performs a $QR$ factorization of a real matrix $A$. The orthogonal matrix $Q$ is represented as a product of elementary reflectors.
This routine may be used to form one of the matrix products
 $QC , QTC , CQ ​ or ​ CQT ,$
overwriting the result on $C$ (which may be any real rectangular matrix).
A common application of this routine is in solving linear least squares problems, as described in the F08 Chapter Introduction and illustrated in Section 10 in f08abf.

## 4References

Golub G H and Van Loan C F (2012) Matrix Computations (4th Edition) Johns Hopkins University Press, Baltimore

## 5Arguments

1: $\mathbf{side}$Character(1) Input
On entry: indicates how $Q$ or ${Q}^{\mathrm{T}}$ is to be applied to $C$.
${\mathbf{side}}=\text{'L'}$
$Q$ or ${Q}^{\mathrm{T}}$ is applied to $C$ from the left.
${\mathbf{side}}=\text{'R'}$
$Q$ or ${Q}^{\mathrm{T}}$ is applied to $C$ from the right.
Constraint: ${\mathbf{side}}=\text{'L'}$ or $\text{'R'}$.
2: $\mathbf{trans}$Character(1) Input
On entry: indicates whether $Q$ or ${Q}^{\mathrm{T}}$ is to be applied to $C$.
${\mathbf{trans}}=\text{'N'}$
$Q$ is applied to $C$.
${\mathbf{trans}}=\text{'T'}$
${Q}^{\mathrm{T}}$ is applied to $C$.
Constraint: ${\mathbf{trans}}=\text{'N'}$ or $\text{'T'}$.
3: $\mathbf{m}$Integer Input
On entry: $m$, the number of rows of the matrix $C$.
Constraint: ${\mathbf{m}}\ge 0$.
4: $\mathbf{n}$Integer Input
On entry: $n$, the number of columns of the matrix $C$.
Constraint: ${\mathbf{n}}\ge 0$.
5: $\mathbf{k}$Integer Input
On entry: $k$, the number of elementary reflectors whose product defines the matrix $Q$. Usually ${\mathbf{k}}=\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left({m}_{A},{n}_{A}\right)$ where ${m}_{A}$, ${n}_{A}$ are the dimensions of the matrix $A$ supplied in a previous call to f08abf.
Constraints:
• if ${\mathbf{side}}=\text{'L'}$, ${\mathbf{m}}\ge {\mathbf{k}}\ge 0$;
• if ${\mathbf{side}}=\text{'R'}$, ${\mathbf{n}}\ge {\mathbf{k}}\ge 0$.
6: $\mathbf{nb}$Integer Input
On entry: the block size used in the $QR$ factorization performed in a previous call to f08abf; this value must remain unchanged from that call.
Constraints:
• ${\mathbf{nb}}\ge 1$;
• if ${\mathbf{k}}>0$, ${\mathbf{nb}}\le {\mathbf{k}}$.
7: $\mathbf{v}\left({\mathbf{ldv}},*\right)$Real (Kind=nag_wp) array Input
Note: the second dimension of the array v must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{k}}\right)$.
On entry: details of the vectors which define the elementary reflectors, as returned by f08abf in the first $k$ columns of its array argument a.
8: $\mathbf{ldv}$Integer Input
On entry: the first dimension of the array v as declared in the (sub)program from which f08acf is called.
Constraints:
• if ${\mathbf{side}}=\text{'L'}$, ${\mathbf{ldv}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$;
• if ${\mathbf{side}}=\text{'R'}$, ${\mathbf{ldv}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
9: $\mathbf{t}\left({\mathbf{ldt}},*\right)$Real (Kind=nag_wp) array Input
Note: the second dimension of the array t must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{k}}\right)$.
On entry: further details of the orthogonal matrix $Q$ as returned by f08abf. The number of blocks is $b=⌈\frac{k}{{\mathbf{nb}}}⌉$, where $k=\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left(m,n\right)$ and each block is of order nb except for the last block, which is of order $k-\left(b-1\right)×{\mathbf{nb}}$. For the $b$ blocks the upper triangular block reflector factors ${\mathbit{T}}_{1},{\mathbit{T}}_{2},\dots ,{\mathbit{T}}_{b}$ are stored in the ${\mathbf{nb}}×n$ matrix $T$ as $\mathbit{T}=\left[{\mathbit{T}}_{1}|{\mathbit{T}}_{2}|\cdots |{\mathbit{T}}_{b}\right]$.
10: $\mathbf{ldt}$Integer Input
On entry: the first dimension of the array t as declared in the (sub)program from which f08acf is called.
Constraint: ${\mathbf{ldt}}\ge {\mathbf{nb}}$.
11: $\mathbf{c}\left({\mathbf{ldc}},*\right)$Real (Kind=nag_wp) array Input/Output
Note: the second dimension of the array c must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
On entry: the $m×n$ matrix $C$.
On exit: c is overwritten by $QC$ or ${Q}^{\mathrm{T}}C$ or $CQ$ or $C{Q}^{\mathrm{T}}$ as specified by side and trans.
12: $\mathbf{ldc}$Integer Input
On entry: the first dimension of the array c as declared in the (sub)program from which f08acf is called.
Constraint: ${\mathbf{ldc}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
13: $\mathbf{work}\left(*\right)$Real (Kind=nag_wp) array Workspace
Note: the dimension of the array work must be at least ${\mathbf{n}}×{\mathbf{nb}}$ if ${\mathbf{side}}=\text{'L'}$ and at least ${\mathbf{m}}×{\mathbf{nb}}$ if ${\mathbf{side}}=\text{'R'}$.
14: $\mathbf{info}$Integer Output
On exit: ${\mathbf{info}}=0$ unless the routine detects an error (see Section 6).

## 6Error Indicators and Warnings

${\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.

## 7Accuracy

The computed result differs from the exact result by a matrix $E$ such that
 $‖E‖2 = O(ε) ‖C‖2 ,$
where $\epsilon$ is the machine precision.

## 8Parallelism and Performance

The total number of floating-point operations is approximately $2nk\left(2m-k\right)$ if ${\mathbf{side}}=\text{'L'}$ and $2mk\left(2n-k\right)$ if ${\mathbf{side}}=\text{'R'}$.