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_dgebrd (f08ke)

## Purpose

nag_lapack_dgebrd (f08ke) reduces a real $m$ by $n$ matrix to bidiagonal form.

## Syntax

[a, d, e, tauq, taup, info] = f08ke(a, 'm', m, 'n', n)
[a, d, e, tauq, taup, info] = nag_lapack_dgebrd(a, 'm', m, 'n', n)

## Description

nag_lapack_dgebrd (f08ke) reduces a real $m$ by $n$ matrix $A$ to bidiagonal form $B$ by an orthogonal transformation: $A=QB{P}^{\mathrm{T}}$, where $Q$ and ${P}^{\mathrm{T}}$ are orthogonal matrices of order $m$ and $n$ respectively.
If $m\ge n$, the reduction is given by:
 $A =Q B1 0 PT = Q1 B1 PT ,$
where ${B}_{1}$ is an $n$ by $n$ upper bidiagonal matrix and ${Q}_{1}$ consists of the first $n$ columns of $Q$.
If $m, the reduction is given by
 $A =Q B1 0 PT = Q B1 P1T ,$
where ${B}_{1}$ is an $m$ by $m$ lower bidiagonal matrix and ${P}_{1}^{\mathrm{T}}$ consists of the first $m$ rows of ${P}^{\mathrm{T}}$.
The orthogonal matrices $Q$ and $P$ are not formed explicitly but are represented as products of elementary reflectors (see the F08 Chapter Introduction for details). Functions are provided to work with $Q$ and $P$ in this representation (see Further Comments).

## References

Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore

## Parameters

### Compulsory Input Parameters

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

### Optional Input Parameters

1:     $\mathrm{m}$int64int32nag_int scalar
Default: the first dimension of the array a.
$m$, the number of rows of the matrix $A$.
Constraint: ${\mathbf{m}}\ge 0$.
2:     $\mathrm{n}$int64int32nag_int scalar
Default: the second dimension of the array a.
$n$, the number of columns of the matrix $A$.
Constraint: ${\mathbf{n}}\ge 0$.

### Output Parameters

1:     $\mathrm{a}\left(\mathit{lda},:\right)$ – double array
The first dimension of the array a will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{m}}\right)$.
The second dimension of the array a will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
If $m\ge n$, the diagonal and first superdiagonal store the upper bidiagonal matrix $B$, elements below the diagonal store details of the orthogonal matrix $Q$ and elements above the first superdiagonal store details of the orthogonal matrix $P$.
If $m, the diagonal and first subdiagonal store the lower bidiagonal matrix $B$, elements below the first subdiagonal store details of the orthogonal matrix $Q$ and elements above the diagonal store details of the orthogonal matrix $P$.
2:     $\mathrm{d}\left(:\right)$ – double array
The dimension of the array d will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left({\mathbf{m}},{\mathbf{n}}\right)\right)$
The diagonal elements of the bidiagonal matrix $B$.
3:     $\mathrm{e}\left(:\right)$ – double array
The dimension of the array e will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left({\mathbf{m}},{\mathbf{n}}\right)-1\right)$
The off-diagonal elements of the bidiagonal matrix $B$.
4:     $\mathrm{tauq}\left(:\right)$ – double array
The dimension of the array tauq will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left({\mathbf{m}},{\mathbf{n}}\right)\right)$
Further details of the orthogonal matrix $Q$.
5:     $\mathrm{taup}\left(:\right)$ – double array
The dimension of the array taup will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left({\mathbf{m}},{\mathbf{n}}\right)\right)$
Further details of the orthogonal matrix $P$.
6:     $\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: m, 2: n, 3: a, 4: lda, 5: d, 6: e, 7: tauq, 8: taup, 9: work, 10: lwork, 11: 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 bidiagonal form $B$ satisfies $QB{P}^{\mathrm{T}}=A+E$, where
 $E2 ≤ c n ε A2 ,$
$c\left(n\right)$ is a modestly increasing function of $n$, and $\epsilon$ is the machine precision.
The elements of $B$ themselves may be sensitive to small perturbations in $A$ or to rounding errors in the computation, but this does not affect the stability of the singular values and vectors.

The total number of floating-point operations is approximately $\frac{4}{3}{n}^{2}\left(3m-n\right)$ if $m\ge n$ or $\frac{4}{3}{m}^{2}\left(3n-m\right)$ if $m.
If $m\gg n$, it can be more efficient to first call nag_lapack_dgeqrf (f08ae) to perform a $QR$ factorization of $A$, and then to call nag_lapack_dgebrd (f08ke) to reduce the factor $R$ to bidiagonal form. This requires approximately $2{n}^{2}\left(m+n\right)$ floating-point operations.
If $m\ll n$, it can be more efficient to first call nag_lapack_dgelqf (f08ah) to perform an $LQ$ factorization of $A$, and then to call nag_lapack_dgebrd (f08ke) to reduce the factor $L$ to bidiagonal form. This requires approximately $2{m}^{2}\left(m+n\right)$ operations.
To form the orthogonal matrices ${P}^{\mathrm{T}}$ and/or $Q$ nag_lapack_dgebrd (f08ke) may be followed by calls to nag_lapack_dorgbr (f08kf):
to form the $m$ by $m$ orthogonal matrix $Q$
```[a, info] = f08kf('Q', k, a, tauq);
```
but note that the second dimension of the array a must be at least m, which may be larger than was required by nag_lapack_dgebrd (f08ke);
to form the $n$ by $n$ orthogonal matrix ${P}^{\mathrm{T}}$
```[a, info] = f08kf('P', k, a, taup);
```
but note that the first dimension of the array a, specified by the argument lda, must be at least n, which may be larger than was required by nag_lapack_dgebrd (f08ke).
To apply $Q$ or $P$ to a real rectangular matrix $C$, nag_lapack_dgebrd (f08ke) may be followed by a call to nag_lapack_dormbr (f08kg).
The complex analogue of this function is nag_lapack_zgebrd (f08ks).

## Example

This example reduces the matrix $A$ to bidiagonal form, 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 .$
```function f08ke_example

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

m = 6;
n = int64(4);
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];

% Reduce A to bidiagonal form
[~, d, e, tauq, taup, info] = f08ke(a);

fprintf(' Bidiagonal matrix B\n   Main diagonal  ');
fprintf(' %7.3f',d);
fprintf('\n   super-diagonal ');
fprintf(' %7.3f',e);
fprintf('\n');

```
```f08ke example results

Bidiagonal matrix B
Main diagonal     3.618   2.416  -1.921  -1.427
super-diagonal    1.259   1.526  -1.189
```