f08 Chapter Contents
f08 Chapter Introduction
NAG Library Manual

# NAG Library Function Documentnag_dggrqf (f08zfc)

## 1  Purpose

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

## 2  Specification

 #include #include
 void nag_dggrqf (Nag_OrderType order, Integer m, Integer p, Integer n, double a[], Integer pda, double taua[], double b[], Integer pdb, double taub[], NagError *fail)

## 3  Description

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

## 4  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$ factorizations . In Reliable Numerical Computation (eds M G Cox and S Hammarling) 73–91 Oxford University Press

## 5  Arguments

1:     orderNag_OrderTypeInput
On entry: the order argument specifies the two-dimensional storage scheme being used, i.e., row-major ordering or column-major ordering. C language defined storage is specified by ${\mathbf{order}}=\mathrm{Nag_RowMajor}$. See Section 3.2.1.3 in the Essential Introduction for a more detailed explanation of the use of this argument.
Constraint: ${\mathbf{order}}=\mathrm{Nag_RowMajor}$ or $\mathrm{Nag_ColMajor}$.
2:     mIntegerInput
On entry: $m$, the number of rows of the matrix $A$.
Constraint: ${\mathbf{m}}\ge 0$.
3:     pIntegerInput
On entry: $p$, the number of rows of the matrix $B$.
Constraint: ${\mathbf{p}}\ge 0$.
4:     nIntegerInput
On entry: $n$, the number of columns of the matrices $A$ and $B$.
Constraint: ${\mathbf{n}}\ge 0$.
5:     a[$\mathit{dim}$]doubleInput/Output
Note: the dimension, dim, of the array a must be at least
• $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{pda}}×{\mathbf{n}}\right)$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}×{\mathbf{pda}}\right)$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
Where ${\mathbf{A}}\left(i,j\right)$ appears in this document, it refers to the array element
• ${\mathbf{a}}\left[\left(j-1\right)×{\mathbf{pda}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{a}}\left[\left(i-1\right)×{\mathbf{pda}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On entry: the $m$ by $n$ matrix $A$.
On exit: if $m\le n$, the upper triangle of the subarray ${\mathbf{A}}\left(1:m,n-m+1:n\right)$ contains the $m$ by $m$ upper triangular matrix ${R}_{12}$.
If $m\ge n$, the elements on and above the $\left(m-n\right)$th subdiagonal contain the $m$ by $n$ upper trapezoidal matrix $R$; the remaining elements, with the array taua, represent the orthogonal matrix $Q$ as a product of $\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left(m,n\right)$ elementary reflectors (see Section 3.3.6 in the f08 Chapter Introduction).
6:     pdaIntegerInput
On entry: the stride separating row or column elements (depending on the value of order) in the array a.
Constraints:
• if ${\mathbf{order}}=\mathrm{Nag_ColMajor}$, ${\mathbf{pda}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$;
• if ${\mathbf{order}}=\mathrm{Nag_RowMajor}$, ${\mathbf{pda}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
7:     taua[$\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left({\mathbf{m}},{\mathbf{n}}\right)$]doubleOutput
On exit: the scalar factors of the elementary reflectors which represent the orthogonal matrix $Q$.
8:     b[$\mathit{dim}$]doubleInput/Output
Note: the dimension, dim, of the array b must be at least
• $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{pdb}}×{\mathbf{n}}\right)$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{p}}×{\mathbf{pdb}}\right)$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
The $\left(i,j\right)$th element of the matrix $B$ is stored in
• ${\mathbf{b}}\left[\left(j-1\right)×{\mathbf{pdb}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{b}}\left[\left(i-1\right)×{\mathbf{pdb}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On entry: the $p$ by $n$ matrix $B$.
On exit: the elements on and above the diagonal of the array contain the $\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left(p,n\right)$ by $n$ upper trapezoidal matrix $T$ ($T$ is upper triangular if $p\ge n$); the elements below the diagonal, with the array taub, represent the orthogonal matrix $Z$ as a product of elementary reflectors (see Section 3.3.6 in the f08 Chapter Introduction).
9:     pdbIntegerInput
On entry: the stride separating row or column elements (depending on the value of order) in the array b.
Constraints:
• if ${\mathbf{order}}=\mathrm{Nag_ColMajor}$, ${\mathbf{pdb}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{p}}\right)$;
• if ${\mathbf{order}}=\mathrm{Nag_RowMajor}$, ${\mathbf{pdb}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
10:   taub[$\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left({\mathbf{p}},{\mathbf{n}}\right)$]doubleOutput
On exit: the scalar factors of the elementary reflectors which represent the orthogonal matrix $Z$.
11:   failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
On entry, argument $⟨\mathit{\text{value}}⟩$ had an illegal value.
NE_INT
On entry, ${\mathbf{m}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{m}}\ge 0$.
On entry, ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{n}}\ge 0$.
On entry, ${\mathbf{p}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{p}}\ge 0$.
On entry, ${\mathbf{pda}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pda}}>0$.
On entry, ${\mathbf{pdb}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pdb}}>0$.
NE_INT_2
On entry, ${\mathbf{pda}}=⟨\mathit{\text{value}}⟩$ and ${\mathbf{m}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pda}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
On entry, ${\mathbf{pda}}=⟨\mathit{\text{value}}⟩$ and ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pda}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
On entry, ${\mathbf{pdb}}=⟨\mathit{\text{value}}⟩$ and ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pdb}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
On entry, ${\mathbf{pdb}}=⟨\mathit{\text{value}}⟩$ and ${\mathbf{p}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{pdb}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{p}}\right)$.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.

## 7  Accuracy

The computed generalized $RQ$ factorization is the exact factorization for nearby matrices $\left(A+E\right)$ and $\left(B+F\right)$, where
 $E2 = O⁡ε A2 and F2= O⁡ε B2 ,$
and $\epsilon$ is the machine precision.

## 8  Parallelism and Performance

nag_dggrqf (f08zfc) is threaded by NAG for parallel execution in multithreaded implementations of the NAG Library.
nag_dggrqf (f08zfc) makes calls to BLAS and/or LAPACK routines, which may be threaded within the vendor library used by this implementation. Consult the documentation for the vendor library for further information.

The orthogonal matrices $Q$ and $Z$ may be formed explicitly by calls to nag_dorgrq (f08cjc) and nag_dorgqr (f08afc) respectively. nag_dormrq (f08ckc) may be used to multiply $Q$ by another matrix and nag_dormqr (f08agc) may be used to multiply $Z$ by another matrix.
The complex analogue of this function is nag_zggrqf (f08ztc).

## 10  Example

This example solves the linear equality constrained least squares problem
 $minx c-Ax2 subject to Bx= d$
where
 $A = -0.57 -1.28 -0.39 0.25 -1.93 1.08 -0.31 -2.14 2.30 0.24 0.40 -0.35 -1.93 0.64 -0.66 0.08 0.15 0.30 0.15 -2.13 -0.02 1.03 -1.43 0.50 , B= 1 0 -1 0 0 1 0 -1 ,$
 $c = -1.50 -2.14 1.23 -0.54 -1.68 0.82 and d= 0 0 .$
The constraints $Bx=d$ correspond to ${x}_{1}={x}_{3}$ and ${x}_{2}={x}_{4}$.
The solution is obtained by first computing a generalized $RQ$ factorization of the matrix pair $\left(B,A\right)$. The example illustrates the general solution process.

### 10.1  Program Text

Program Text (f08zfce.c)

### 10.2  Program Data

Program Data (f08zfce.d)

### 10.3  Program Results

Program Results (f08zfce.r)