f01 Chapter Contents
f01 Chapter Introduction
NAG C Library Manual

# NAG Library Function Documentnag_real_apply_q (f01qdc)

## 1  Purpose

nag_real_apply_q (f01qdc) performs one of the transformations
 $B : = QB or B : = QT B ,$
where $B$ is an $m$ by $\mathit{ncolb}$ real matrix and $Q$ is an $m$ by $m$ orthogonal matrix, given as the product of Householder transformation matrices.
This function is intended for use following nag_real_qr (f01qcc).

## 2  Specification

 #include #include
 void nag_real_apply_q (MatrixTranspose trans, Nag_WhereElements wheret, Integer m, Integer n, double a[], Integer tda, const double zeta[], Integer ncolb, double b[], Integer tdb, NagError *fail)

## 3  Description

$Q$ is assumed to be given by
 $Q = Q n Q n-1 ⋯ Q 1 T ,$
${Q}_{k}$ being given in the form
 $Q k = I 0 0 T k ,$
where
 $T k = I - u k ukT ,$
 $u k = ζ k z k ,$
${\zeta }_{k}$ is a scalar and ${z}_{k}$ is an $\left(m-k\right)$ element vector. ${z}_{k}$ must be supplied in the $\left(k-1\right)$th column of a in elements ${\mathbf{a}}\left[\left(k\right)×{\mathbf{tda}}+k-1\right],\dots ,{\mathbf{a}}\left[\left(m-1\right)×{\mathbf{tda}}+k-1\right]$ and ${\zeta }_{k}$ must be supplied either in ${\mathbf{a}}\left[\left(k-1\right)×{\mathbf{tda}}+k-1\right]$ or in ${\mathbf{zeta}}\left[k-1\right]$, depending upon the argument wheret.
To obtain $Q$ explicitly $B$ may be set to $I$ and premultiplied by $Q$. This is more efficient than obtaining ${Q}^{\mathrm{T}}$.

## 4  References

Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore
Wilkinson J H (1965) The Algebraic Eigenvalue Problem Oxford University Press, Oxford

## 5  Arguments

1:     transMatrixTranspose Input
On entry: the operation to be performed as follows:
• ${\mathbf{trans}}=\mathrm{NoTranspose}$, perform the operation $B:=QB$.
• ${\mathbf{trans}}=\mathrm{Transpose}$ or $\mathrm{ConjugateTranspose}$, perform the operation $B:={Q}^{\mathrm{T}}B$.
Constraint: trans must be one of NoTranspose, Transpose or ConjugateTranspose.
2:     wheretNag_WhereElementsInput
On entry: indicates where the elements of $\zeta$ are to be found as follows:
• ${\mathbf{wheret}}=\mathrm{Nag_ElementsIn}$, the elements of $\zeta$ are in a.
• ${\mathbf{wheret}}=\mathrm{Nag_ElementsSeparate}$ the elements of $\zeta$ are separate from a, in zeta.
Constraint: wheret must be Nag_ElementsIn or Nag_ElementsSeparate.
3:     mIntegerInput
On entry: $m$, the number of rows of $A$.
Constraint: ${\mathbf{m}}\ge {\mathbf{n}}$.
4:     nIntegerInput
On entry: $n$, the number of columns of $A$.
When ${\mathbf{n}}=0$ then an immediate return is effected.
Constraint: ${\mathbf{n}}\ge 0$.
5:     a[${\mathbf{m}}×{\mathbf{tda}}$]doubleInput
On entry: the leading $m$ by $n$ strictly lower triangular part of the array a must contain details of the matrix $Q$. In addition, when ${\mathbf{wheret}}=\mathrm{Nag_ElementsIn}$, then the diagonal elements of a must contain the elements of $\zeta$ as described under the argument zeta. When ${\mathbf{wheret}}=\mathrm{Nag_ElementsSeparate}$, the diagonal elements of the array a are referenced, since they are used temporarily to store the ${\zeta }_{k}$, but they contain their original values on return.
6:     tdaIntegerInput
On entry: the stride separating matrix column elements in the array a.
Constraint: ${\mathbf{tda}}\ge {\mathbf{n}}$.
7:     zeta[n]const doubleInput
On entry: if ${\mathbf{wheret}}=\mathrm{Nag_ElementsSeparate}$, the array zeta must contain the elements of $\zeta$. If ${\mathbf{zeta}}\left[k-1\right]=0.0$ then ${T}_{k}$ is assumed to be $I$ otherwise ${\mathbf{zeta}}\left[k-1\right]$ is assumed to contain ${\zeta }_{k}$. When ${\mathbf{wheret}}=\mathrm{Nag_ElementsIn}$, zeta is not referenced and may be set to the null pointer, i.e., (double *)0.
8:     ncolbIntegerInput
On entry: $\mathit{ncolb}$, the number of columns of $B$.
When ${\mathbf{ncolb}}=0$ then an immediate return is effected.
Constraint: ${\mathbf{ncolb}}\ge 0$.
9:     b[${\mathbf{m}}×{\mathbf{tdb}}$]doubleInput/Output
Note: the $\left(i,j\right)$th element of the matrix $B$ is stored in ${\mathbf{b}}\left[\left(i-1\right)×{\mathbf{tdb}}+j-1\right]$.
On entry: the leading $m$ by $\mathit{ncolb}$ part of the array b must contain the matrix to be transformed.
On exit: b is overwritten by the transformed matrix.
10:   tdbIntegerInput
On entry: the stride separating matrix column elements in the array b.
Constraint: ${\mathbf{tdb}}\ge {\mathbf{ncolb}}$.
11:   failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

NE_2_INT_ARG_LT
On entry, ${\mathbf{m}}=〈\mathit{\text{value}}〉$ while ${\mathbf{n}}=〈\mathit{\text{value}}〉$. These arguments must satisfy ${\mathbf{m}}\ge {\mathbf{n}}$.
On entry, ${\mathbf{tda}}=〈\mathit{\text{value}}〉$ while ${\mathbf{n}}=〈\mathit{\text{value}}〉$. These arguments must satisfy ${\mathbf{tda}}\ge {\mathbf{n}}$.
On entry, ${\mathbf{tdb}}=〈\mathit{\text{value}}〉$ while ${\mathbf{ncolb}}=〈\mathit{\text{value}}〉$. These arguments must satisfy ${\mathbf{tdb}}\ge {\mathbf{ncolb}}$.
NE_ALLOC_FAIL
Dynamic memory allocation failed.
On entry, argument trans had an illegal value.
On entry, argument wheret had an illegal value.
NE_INT_ARG_LT
On entry, ${\mathbf{n}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{n}}\ge 0$.
On entry, ${\mathbf{ncolb}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{ncolb}}\ge 0$.

## 7  Accuracy

Letting $C$ denote the computed matrix ${Q}^{\mathrm{T}}B$, $C$ satisfies the relation
 $QC = B + E$
where $‖E‖\le c\epsilon ‖B‖$, $\epsilon$ is the machine precision, $c$ is a modest function of $m$ and $\text{.}$ denotes the spectral (two) norm. An equivalent result holds for the computed matrix $QB$. See also Section 8.

The approximate number of floating point operations is given by $2n\left(2m-n\right)\mathit{ncolb}$.

## 9  Example

To obtain the matrix ${Q}^{\mathrm{T}}B$ for the matrix $B$ given by
 $B = 1.10 0.00 0.90 0.00 0.60 1.32 0.00 1.10 -0.80 -0.26$
following the $QR$ factorization of the 5 by 3 matrix $A$ given by
 $A = 2.0 2.5 2.5 2.0 2.5 2.5 1.6 -0.4 2.8 2.0 -0.5 0.5 1.2 -0.3 -2.9 .$

### 9.1  Program Text

Program Text (f01qdce.c)

### 9.2  Program Data

Program Data (f01qdce.d)

### 9.3  Program Results

Program Results (f01qdce.r)