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_zggrqf (f08zt)

## Purpose

nag_lapack_zggrqf (f08zt) computes a generalized RQ$RQ$ factorization of a complex matrix pair (A,B)$\left(A,B\right)$, where A$A$ is an m$m$ by n$n$ matrix and B$B$ is a p$p$ by n$n$ matrix.

## Syntax

[a, taua, b, taub, info] = f08zt(a, b, 'm', m, 'p', p, 'n', n)
[a, taua, b, taub, info] = nag_lapack_zggrqf(a, b, 'm', m, 'p', p, 'n', n)

## Description

nag_lapack_zggrqf (f08zt) forms the generalized RQ$RQ$ factorization of an m$m$ by n$n$ matrix A$A$ and a p$p$ by n$n$ matrix B$B$
 A = RQ ,   B = ZTQ , $A = RQ , B= ZTQ ,$
where Q$Q$ is an n$n$ by n$n$ unitary matrix, Z$Z$ is a p$p$ by p$p$ unitary matrix and R$R$ and T$T$ are of the form
R =
{
 n − mmm(0R12) ;   if ​m ≤ n,
 nm − n(R11) n R21 ;   if ​m > n,
$R = { n-mmm(0R12) ; if ​ m≤n , nm-n(R11) n R21 ; if ​ m>n ,$
with R12${R}_{12}$ or R21${R}_{21}$ upper triangular,
T =
{
 nn(T11) p − n 0 ;   if ​p ≥ n,
 pn − pp(T11T12) ;   if ​p < n,
$T = { nn(T11) p-n 0 ; if ​ p≥n , pn-pp(T11T12) ; if ​ p
with T11${T}_{11}$ upper triangular.
In particular, if B$B$ is square and nonsingular, the generalized RQ$RQ$ factorization of A$A$ and B$B$ implicitly gives the RQ$RQ$ factorization of AB1$A{B}^{-1}$ as
 AB − 1 = (RT − 1) ZH . $AB-1= ( R T-1 ) ZH .$

## 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
Anderson E, Bai Z and Dongarra J (1992) Generalized QR factorization and its applications Linear Algebra Appl. (Volume 162–164) 243–271
Hammarling S (1987) The numerical solution of the general Gauss-Markov linear model Mathematics in Signal Processing (eds T S Durrani, J B Abbiss, J E Hudson, R N Madan, J G McWhirter and T A Moore) 441–456 Oxford University Press
Paige C C (1990) Some aspects of generalized QR$QR$ factorizations . In Reliable Numerical Computation (eds M G Cox and S Hammarling) 73–91 Oxford University Press

## Parameters

### Compulsory Input Parameters

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

### Optional Input Parameters

1:     m – int64int32nag_int scalar
Default: The first dimension of the array a.
m$m$, the number of rows of the matrix A$A$.
Constraint: m0${\mathbf{m}}\ge 0$.
2:     p – int64int32nag_int scalar
Default: The first dimension of the array b.
p$p$, the number of rows of the matrix B$B$.
Constraint: p0${\mathbf{p}}\ge 0$.
3:     n – int64int32nag_int scalar
Default: The second dimension of the arrays a, b.
n$n$, the number of columns of the matrices A$A$ and B$B$.
Constraint: n0${\mathbf{n}}\ge 0$.

### Input Parameters Omitted from the MATLAB Interface

lda ldb work lwork

### Output Parameters

1:     a(lda, : $:$) – complex array
The first dimension of the array a will be max (1,m)$\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$
The second dimension of the array will be max (1,n)$\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$
ldamax (1,m)$\mathit{lda}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
If mn$m\le n$, the upper triangle of the subarray a(1 : m,nm + 1 : n)${\mathbf{a}}\left(1:m,n-m+1:n\right)$ contains the m$m$ by m$m$ upper triangular matrix R12${R}_{12}$.
If mn$m\ge n$, the elements on and above the (mn)$\left(m-n\right)$th subdiagonal contain the m$m$ by n$n$ upper trapezoidal matrix R$R$; the remaining elements, with the array taua, represent the unitary matrix Q$Q$ as a product of min (m,n)$\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left(m,n\right)$ elementary reflectors (see Section [Representation of orthogonal or unitary matrices] in the F08 Chapter Introduction).
2:     taua(min (m,n)$\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left({\mathbf{m}},{\mathbf{n}}\right)$) – complex array
The scalar factors of the elementary reflectors which represent the unitary matrix Q$Q$.
3:     b(ldb, : $:$) – complex array
The first dimension of the array b will be max (1,p)$\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{p}}\right)$
The second dimension of the array will be max (1,n)$\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$
ldbmax (1,p)$\mathit{ldb}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{p}}\right)$.
The elements on and above the diagonal of the array contain the min (p,n)$\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left(p,n\right)$ by n$n$ upper trapezoidal matrix T$T$ (T$T$ is upper triangular if pn$p\ge n$); the elements below the diagonal, with the array taub, represent the unitary matrix Z$Z$ as a product of elementary reflectors (see Section [Representation of orthogonal or unitary matrices] in the F08 Chapter Introduction).
4:     taub(min (p,n)$\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left({\mathbf{p}},{\mathbf{n}}\right)$) – complex array
The scalar factors of the elementary reflectors which represent the unitary matrix Z$Z$.
5:     info – int64int32nag_int scalar
info = 0${\mathbf{info}}=0$ unless the function detects an error (see Section [Error Indicators and Warnings]).

## Error Indicators and Warnings

info = i${\mathbf{info}}=-i$
If info = i${\mathbf{info}}=-i$, parameter i$i$ had an illegal value on entry. The parameters are numbered as follows:
1: m, 2: p, 3: n, 4: a, 5: lda, 6: taua, 7: b, 8: ldb, 9: taub, 10: work, 11: lwork, 12: 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 generalized RQ$RQ$ factorization is the exact factorization for nearby matrices (A + E)$\left(A+E\right)$ and (B + F)$\left(B+F\right)$, where
 ‖E‖2 = Oε ‖A‖2   and   ‖F‖2 = Oε ‖B‖2 , $‖E‖2 = O⁡ε ‖A‖2 and ‖F‖2= O⁡ε ‖B‖2 ,$
and ε$\epsilon$ is the machine precision.

The unitary matrices Q$Q$ and Z$Z$ may be formed explicitly by calls to nag_lapack_zungrq (f08cw) and nag_lapack_zungqr (f08at) respectively. nag_lapack_zunmrq (f08cx) may be used to multiply Q$Q$ by another matrix and nag_lapack_zunmqr (f08au) may be used to multiply Z$Z$ by another matrix.
The real analogue of this function is nag_lapack_dggrqf (f08zf).

## Example

```function nag_lapack_zggrqf_example
a = [complex(1),  0 + 0i,  -1 + 0i,  0 + 0i;
0 + 0i,  1 + 0i,  0 + 0i,  -1 + 0i];
b = [ 0.96 - 0.81i,  -0.03 + 0.96i,  -0.91 + 2.06i, ...
-0.05 + 0.41i;
-0.98 + 1.98i,  -1.2 + 0.19i,  -0.66 + 0.42i, ...
-0.81 + 0.56i;
0.62 - 0.46i,  1.01 + 0.02i,  0.63 - 0.17i, ...
-1.11 + 0.6i;
0.37 + 0.38i,  0.19 - 0.54i,  -0.98 - 0.36i, ...
0.22 - 0.2i;
0.83 + 0.51i,  0.2 + 0.01i,  -0.17 - 0.46i, ...
1.47 + 1.59i;
1.08 - 0.28i,  0.2 - 0.12i,  -0.07 + 1.23i, ...
0.26 + 0.26i];
c = [ -2.54 + 0.09i;
1.65 - 2.26i;
-2.11 - 3.96i;
1.82 + 3.30i;
-6.41 + 3.77i;
2.07 + 0.66i];
d = complex([0;0]);
p = 6;
n = 4;
m = 2;

% Compute the generalized RQ factorization of (B,A) as
% A = (0 R12)*Q,   B = Z*(T11 T12 T13)*Q, where R12, T11 and T22
%                        ( 0  T22 T23)
% are upper triangular
[a, taua, b, taub, info] = nag_lapack_zggrqf(a, b);

% Compute (f1) = (Z^H)*c
%         (f2)
[f, info] = nag_lapack_zunmqr('Left', 'Conjugate transpose', b, taub, c);

% Putting Q*x = (y1), solve R12*w = d for w, storing result in d
%               (w )
[d, info] = nag_lapack_ztrtrs('Upper', 'No transpose', 'Non-unit', complex(a(:, n-m+1:n)), d);

% Form f1 - T1*w, T1 = (T12 T13), in f
f = f - b(:, n-m+1:n)*d;

% Solve T11*y1 = f1 - T1*w for y1
[f(1:n-m), info] = nag_lapack_ztrtrs('Upper', 'No transpose', 'Non-unit', ...
b(1:n-m, 1:n-m), f(1:n-m));

% Compute x = (Q^H)*y
[a, x, info] = nag_lapack_zunmrq('Left', 'Conjugate transpose', a, taua, [f(1:n-m);d]);

% Putting w = (y2), form f2 - T22*y2 - T23*y3
%             (y3)
% d = T22*y2
d = triu(b(n-m+1:n,n-m+1:n))*d;

% f = f2 - T22*y2
for i=1:min(p,n)-n+m
f(n-m+i) = f(n-m+i) - d(i);
end

if p < n
% f = f2 - T22*y2 - T23*y3
f(n-m+1:p) = f(n-m+1) - b(n-m+1,p+1:n)*d(p-n+m+1:m);
end

% Compute estimate of the square root of the residual sum of
% squares norm(r) = norm(f2 - T22*y2 - T23*y3)
rnorm = norm(f(n-m+1:p));

fprintf('\nConstrained least squares solution\n');
disp(transpose(x(1:n)));

fprintf('Square root of the residual sum of squares\n');
disp(rnorm);
```
```

Constrained least squares solution
1.0874 - 1.9621i  -0.7409 + 3.7297i   1.0874 - 1.9621i  -0.7409 + 3.7297i

Square root of the residual sum of squares
0.1587

```
```function f08zt_example
a = [complex(1),  0 + 0i,  -1 + 0i,  0 + 0i;
0 + 0i,  1 + 0i,  0 + 0i,  -1 + 0i];
b = [ 0.96 - 0.81i,  -0.03 + 0.96i,  -0.91 + 2.06i, ...
-0.05 + 0.41i;
-0.98 + 1.98i,  -1.2 + 0.19i,  -0.66 + 0.42i, ...
-0.81 + 0.56i;
0.62 - 0.46i,  1.01 + 0.02i,  0.63 - 0.17i, ...
-1.11 + 0.6i;
0.37 + 0.38i,  0.19 - 0.54i,  -0.98 - 0.36i, ...
0.22 - 0.2i;
0.83 + 0.51i,  0.2 + 0.01i,  -0.17 - 0.46i, ...
1.47 + 1.59i;
1.08 - 0.28i,  0.2 - 0.12i,  -0.07 + 1.23i, ...
0.26 + 0.26i];
c = [ -2.54 + 0.09i;
1.65 - 2.26i;
-2.11 - 3.96i;
1.82 + 3.30i;
-6.41 + 3.77i;
2.07 + 0.66i];
d = complex([0;0]);
p = 6;
n = 4;
m = 2;

% Compute the generalized RQ factorization of (B,A) as
% A = (0 R12)*Q,   B = Z*(T11 T12 T13)*Q, where R12, T11 and T22
%                        ( 0  T22 T23)
% are upper triangular
[a, taua, b, taub, info] = f08zt(a, b);

% Compute (f1) = (Z^H)*c
%         (f2)
[f, info] = f08au('Left', 'Conjugate transpose', b, taub, c);

% Putting Q*x = (y1), solve R12*w = d for w, storing result in d
%               (w )
[d, info] = f07ts('Upper', 'No transpose', 'Non-unit', complex(a(:, n-m+1:n)), d);

% Form f1 - T1*w, T1 = (T12 T13), in f
f = f - b(:, n-m+1:n)*d;

% Solve T11*y1 = f1 - T1*w for y1
[f(1:n-m), info] = f07ts('Upper', 'No transpose', 'Non-unit', ...
b(1:n-m, 1:n-m), f(1:n-m));

% Compute x = (Q^H)*y
[a, x, info] = f08cx('Left', 'Conjugate transpose', a, taua, [f(1:n-m);d]);

% Putting w = (y2), form f2 - T22*y2 - T23*y3
%             (y3)
% d = T22*y2
d = triu(b(n-m+1:n,n-m+1:n))*d;

% f = f2 - T22*y2
for i=1:min(p,n)-n+m
f(n-m+i) = f(n-m+i) - d(i);
end

if p < n
% f = f2 - T22*y2 - T23*y3
f(n-m+1:p) = f(n-m+1) - b(n-m+1,p+1:n)*d(p-n+m+1:m);
end

% Compute estimate of the square root of the residual sum of
% squares norm(r) = norm(f2 - T22*y2 - T23*y3)
rnorm = norm(f(n-m+1:p));

fprintf('\nConstrained least squares solution\n');
disp(transpose(x(1:n)));

fprintf('Square root of the residual sum of squares\n');
disp(rnorm);
```
```

Constrained least squares solution
1.0874 - 1.9621i  -0.7409 + 3.7297i   1.0874 - 1.9621i  -0.7409 + 3.7297i

Square root of the residual sum of squares
0.1587

```

Chapter Contents
Chapter Introduction
NAG Toolbox

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2013