Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

# NAG Toolbox: nag_lapack_dggrqf (f08zf)

## Purpose

nag_lapack_dggrqf (f08zf) computes a generalized RQ$RQ$ factorization of a real 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] = f08zf(a, b, 'm', m, 'p', p, 'n', n)
[a, taua, b, taub, info] = nag_lapack_dggrqf(a, b, 'm', m, 'p', p, 'n', n)

## Description

nag_lapack_dggrqf (f08zf) 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$ orthogonal matrix, Z$Z$ is a p$p$ by p$p$ orthogonal 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) ZT . $AB-1= ( R T-1 ) ZT .$

## 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, : $:$) – double 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, : $:$) – double 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, : $:$) – double 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 orthogonal 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)$) – double array
The scalar factors of the elementary reflectors which represent the orthogonal matrix Q$Q$.
3:     b(ldb, : $:$) – double 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 orthogonal 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)$) – double array
The scalar factors of the elementary reflectors which represent the orthogonal 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 orthogonal matrices Q$Q$ and Z$Z$ may be formed explicitly by calls to nag_lapack_dorgrq (f08cj) and nag_lapack_dorgqr (f08af) respectively. nag_lapack_dormrq (f08ck) may be used to multiply Q$Q$ by another matrix and nag_lapack_dormqr (f08ag) may be used to multiply Z$Z$ by another matrix.
The complex analogue of this function is nag_lapack_zggrqf (f08zt).

## Example

```function nag_lapack_dggrqf_example
a = [1, 0, -1, 0;
0, 1, 0, -1];
b = [-0.57, -1.28, -0.39, 0.25;
-1.93, 1.08, -0.31, -2.14;
2.3, 0.24, 0.4, -0.35;
-1.93, 0.64, -0.66, 0.08;
0.15, 0.3, 0.15, -2.13;
-0.02, 1.03, -1.43, 0.5];
c= [-1.50; -2.14; 1.23; -0.54; -1.68; 0.82];
d = [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_dggrqf(a, b);

% Compute (f1) = (Z^T)*c
%         (f2)
[f, info] = nag_lapack_dormqr('Left', 'Transpose', b, taub, c);

% Putting Q*x = (y1), solve R12*w = d for w, storing result in d
%               (w )
[d, info] = nag_lapack_dtrtrs('Upper', 'No transpose', 'Non-unit', 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_dtrtrs('Upper', 'No transpose', 'Non-unit', ...
b(1:n-m, 1:n-m), f(1:n-m));

% Compute x = (Q^T)*y
[a, x, info] = nag_lapack_dormrq('Left', '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
0.4890    0.9975    0.4890    0.9975

Square root of the residual sum of squares
0.0251

```
```function f08zf_example
a = [1, 0, -1, 0;
0, 1, 0, -1];
b = [-0.57, -1.28, -0.39, 0.25;
-1.93, 1.08, -0.31, -2.14;
2.3, 0.24, 0.4, -0.35;
-1.93, 0.64, -0.66, 0.08;
0.15, 0.3, 0.15, -2.13;
-0.02, 1.03, -1.43, 0.5];
c= [-1.50; -2.14; 1.23; -0.54; -1.68; 0.82];
d = [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] = f08zf(a, b);

% Compute (f1) = (Z^T)*c
%         (f2)
[f, info] = f08ag('Left', 'Transpose', b, taub, c);

% Putting Q*x = (y1), solve R12*w = d for w, storing result in d
%               (w )
[d, info] = f07te('Upper', 'No transpose', 'Non-unit', 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] = f07te('Upper', 'No transpose', 'Non-unit', ...
b(1:n-m, 1:n-m), f(1:n-m));

% Compute x = (Q^T)*y
[a, x, info] = f08ck('Left', '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
0.4890    0.9975    0.4890    0.9975

Square root of the residual sum of squares
0.0251

```

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

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