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_zunmrz (f08bx)

## Purpose

nag_lapack_zunmrz (f08bx) multiplies a general complex $m$ by $n$ matrix $C$ by the complex unitary matrix $Z$ from an $RZ$ factorization computed by nag_lapack_ztzrzf (f08bv).

## Syntax

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

## Description

nag_lapack_zunmrz (f08bx) is intended to be used following a call to nag_lapack_ztzrzf (f08bv), which performs an $RZ$ factorization of a real upper trapezoidal matrix $A$ and represents the unitary matrix $Z$ as a product of elementary reflectors.
This function may be used to form one of the matrix products
 $ZC , ZHC , CZ , CZH ,$
overwriting the result on $C$, which may be any complex 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{H}}$ is to be applied to $C$.
${\mathbf{side}}=\text{'L'}$
$Z$ or ${Z}^{\mathrm{H}}$ is applied to $C$ from the left.
${\mathbf{side}}=\text{'R'}$
$Z$ or ${Z}^{\mathrm{H}}$ 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{H}}$ is to be applied to $C$.
${\mathbf{trans}}=\text{'N'}$
$Z$ is applied to $C$.
${\mathbf{trans}}=\text{'C'}$
${Z}^{\mathrm{H}}$ is applied to $C$.
Constraint: ${\mathbf{trans}}=\text{'N'}$ or $\text{'C'}$.
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)$ – complex 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_ztzrzf (f08bv).
5:     $\mathrm{tau}\left(:\right)$ – complex 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_ztzrzf (f08bv).
6:     $\mathrm{c}\left(\mathit{ldc},:\right)$ – complex 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)$ – complex 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{H}}C$ or $CZ$ or ${Z}^{\mathrm{H}}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 $16nlk$ if ${\mathbf{side}}=\text{'L'}$ and $16mlk$ if ${\mathbf{side}}=\text{'R'}$.
The real analogue of this function is nag_lapack_dormrz (f08bk).

## Example

See Example in nag_lapack_ztzrzf (f08bv).
```function f08bx_example

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

% Upper trapezoidal matrix A
m = int64(3);
n = int64(4);
l = int64(n-m);
a = [ 2.5 - 0.0i,  0.4 - 0.6i, -0.3 - 1.0i,  0.0 - 0.2i;
0.0 + 0.0i, -1.9 - 0.0i,  0.6 + 0.2i, -0.0 + 0.1i;
0.0 + 0.0i,  0.0 + 0.0i, -1.2 - 0.0i, -0.2 - 0.2i];

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

% Form Y = Z^H * C
c = [ -0.71 - 0.01i,  0.26 - 0.43i;
-4.26 - 2.46i, -0.31 - 1.49i;
-2.07 - 6.22i,  1.74 + 2.30i;
0.00 + 0.00i,  0.00 + 0.00i];

side = 'Left';
trans = 'Conjugate transpose';

[zhc, info] = f08bx( ...
side, trans, l, rz, tau, c);

disp('   Z^H * C:');
disp(zhc);

```
```f08bx example results

Z^H * C:
0.7089 + 0.0100i  -0.2596 + 0.4293i
4.2581 + 2.4592i   0.3088 + 1.4893i
1.9911 + 6.0296i  -1.6985 - 2.2517i
1.4894 + 0.6754i  -0.6015 - 0.0664i

```