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_dormrz (f08bk)

## Purpose

nag_lapack_dormrz (f08bk) multiplies a general real $m$ by $n$ matrix $C$ by the real orthogonal matrix $Z$ from an $RZ$ factorization computed by nag_lapack_dtzrzf (f08bh).

## Syntax

[c, info] = f08bk(side, trans, l, a, tau, c, 'm', m, 'n', n, 'k', k)
[c, info] = nag_lapack_dormrz(side, trans, l, a, tau, c, 'm', m, 'n', n, 'k', k)

## Description

nag_lapack_dormrz (f08bk) is intended to be used following a call to nag_lapack_dtzrzf (f08bh), which performs an $RZ$ factorization of a real upper trapezoidal matrix $A$ and represents the orthogonal matrix $Z$ as a product of elementary reflectors.
This function may be used to form one of the matrix products
 $ZC , ZTC , CZ , CZT ,$
overwriting the result on $C$, which may be any real rectangular $m$ by $n$ matrix.

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

## Parameters

### Compulsory Input Parameters

1:     $\mathrm{side}$ – string (length ≥ 1)
Indicates how $Z$ or ${Z}^{\mathrm{T}}$ is to be applied to $C$.
${\mathbf{side}}=\text{'L'}$
$Z$ or ${Z}^{\mathrm{T}}$ is applied to $C$ from the left.
${\mathbf{side}}=\text{'R'}$
$Z$ or ${Z}^{\mathrm{T}}$ is applied to $C$ from the right.
Constraint: ${\mathbf{side}}=\text{'L'}$ or $\text{'R'}$.
2:     $\mathrm{trans}$ – string (length ≥ 1)
Indicates whether $Z$ or ${Z}^{\mathrm{T}}$ is to be applied to $C$.
${\mathbf{trans}}=\text{'N'}$
$Z$ is applied to $C$.
${\mathbf{trans}}=\text{'T'}$
${Z}^{\mathrm{T}}$ is applied to $C$.
Constraint: ${\mathbf{trans}}=\text{'N'}$ or $\text{'T'}$.
3:     $\mathrm{l}$int64int32nag_int scalar
$l$, the number of columns of the matrix $A$ containing the meaningful part of the Householder reflectors.
Constraints:
• if ${\mathbf{side}}=\text{'L'}$, ${\mathbf{m}}\ge {\mathbf{l}}\ge 0$;
• if ${\mathbf{side}}=\text{'R'}$, ${\mathbf{n}}\ge {\mathbf{l}}\ge 0$.
4:     $\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{k}}\right)$.
The second dimension of the array a must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$ if ${\mathbf{side}}=\text{'L'}$ and at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$ if ${\mathbf{side}}=\text{'R'}$.
The $\mathit{i}$th row of a must contain the vector which defines the elementary reflector ${H}_{\mathit{i}}$, for $\mathit{i}=1,2,\dots ,k$, as returned by nag_lapack_dtzrzf (f08bh).
5:     $\mathrm{tau}\left(:\right)$ – double array
The dimension of the array tau must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{k}}\right)$
${\mathbf{tau}}\left(i\right)$ must contain the scalar factor of the elementary reflector ${H}_{i}$, as returned by nag_lapack_dtzrzf (f08bh).
6:     $\mathrm{c}\left(\mathit{ldc},:\right)$ – double array
The first dimension of the array c must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
The second dimension of the array c must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
The $m$ by $n$ matrix $C$.

### Optional Input Parameters

1:     $\mathrm{m}$int64int32nag_int scalar
Default: the first dimension of the array c.
$m$, the number of rows of the matrix $C$.
Constraint: ${\mathbf{m}}\ge 0$.
2:     $\mathrm{n}$int64int32nag_int scalar
Default: the second dimension of the array c.
$n$, the number of columns of the matrix $C$.
Constraint: ${\mathbf{n}}\ge 0$.
3:     $\mathrm{k}$int64int32nag_int scalar
Default: the first dimension of the array a and the dimension of the array tau.
$k$, the number of elementary reflectors whose product defines the matrix $Z$.
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$.

### Output Parameters

1:     $\mathrm{c}\left(\mathit{ldc},:\right)$ – double array
The first dimension of the array c will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
The second dimension of the array c will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
c stores $ZC$ or ${Z}^{\mathrm{T}}C$ or $CZ$ or ${Z}^{\mathrm{T}}C$ as specified by side and trans.
2:     $\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: side, 2: trans, 3: m, 4: n, 5: k, 6: l, 7: a, 8: lda, 9: tau, 10: c, 11: ldc, 12: work, 13: lwork, 14: 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.

## Accuracy

The computed result differs from the exact result by a matrix $E$ such that
 $E2 = O⁡ε C2$
where $\epsilon$ is the machine precision.

The total number of floating-point operations is approximately $4nlk$ if ${\mathbf{side}}=\text{'L'}$ and $4mlk$ if ${\mathbf{side}}=\text{'R'}$.
The complex analogue of this function is nag_lapack_zunmrz (f08bx).

## Example

See Example in nag_lapack_dtzrzf (f08bh).
```function f08bk_example

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

% Upper trapezoidal matrix A
m = int64(4);
n = int64(5);
a = [-0.09,  0.14, -0.46,  0.68,  1.29;
0.00,  0.2,   0.29,  1.09,  0.51;
0.00   0.00,  0.89, -0.71, -0.96;
0.00   0.00,  0.00,  2.11, -1.27];

% Compute the RZ factorization of A
[rz, tau, info] = f08bh(a);

% Form Z^T*C
side = 'Left';
trans = 'Transpose';
c = [-0.6, -3.6;
-3.6, -0.5;
-3.1, -2.3;
-1.6, -2.4;
0.0,  0.0];
[ztc, info] = f08bk( ...
side, trans, n-m, rz, tau, c);

disp('   Z^T * C:');
disp(ztc);

```
```f08bk example results

Z^T * C:
0.5882    3.5295
0.7275   -0.5723
4.6819    1.9005
1.1815    1.3084
-1.1396   -2.4802

```