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_zsptrf (f07qr)

## Purpose

nag_lapack_zsptrf (f07qr) computes the Bunch–Kaufman factorization of a complex symmetric matrix, using packed storage.

## Syntax

[ap, ipiv, info] = f07qr(uplo, n, ap)
[ap, ipiv, info] = nag_lapack_zsptrf(uplo, n, ap)

## Description

nag_lapack_zsptrf (f07qr) factorizes a complex symmetric matrix $A$, using the Bunch–Kaufman diagonal pivoting method and packed storage. $A$ is factorized as either $A=PUD{U}^{\mathrm{T}}{P}^{\mathrm{T}}$ if ${\mathbf{uplo}}=\text{'U'}$ or $A=PLD{L}^{\mathrm{T}}{P}^{\mathrm{T}}$ if ${\mathbf{uplo}}=\text{'L'}$, where $P$ is a permutation matrix, $U$ (or $L$) is a unit upper (or lower) triangular matrix and $D$ is a symmetric block diagonal matrix with $1$ by $1$ and $2$ by $2$ diagonal blocks; $U$ (or $L$) has $2$ by $2$ unit diagonal blocks corresponding to the $2$ by $2$ blocks of $D$. Row and column interchanges are performed to ensure numerical stability while preserving symmetry.

## 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{uplo}$ – string (length ≥ 1)
Specifies whether the upper or lower triangular part of $A$ is stored and how $A$ is to be factorized.
${\mathbf{uplo}}=\text{'U'}$
The upper triangular part of $A$ is stored and $A$ is factorized as $PUD{U}^{\mathrm{T}}{P}^{\mathrm{T}}$, where $U$ is upper triangular.
${\mathbf{uplo}}=\text{'L'}$
The lower triangular part of $A$ is stored and $A$ is factorized as $PLD{L}^{\mathrm{T}}{P}^{\mathrm{T}}$, where $L$ is lower triangular.
Constraint: ${\mathbf{uplo}}=\text{'U'}$ or $\text{'L'}$.
2:     $\mathrm{n}$int64int32nag_int scalar
$n$, the order of the matrix $A$.
Constraint: ${\mathbf{n}}\ge 0$.
3:     $\mathrm{ap}\left(:\right)$ – complex array
The dimension of the array ap must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}×\left({\mathbf{n}}+1\right)/2\right)$
The $n$ by $n$ symmetric matrix $A$, packed by columns.
More precisely,
• if ${\mathbf{uplo}}=\text{'U'}$, the upper triangle of $A$ must be stored with element ${A}_{ij}$ in ${\mathbf{ap}}\left(i+j\left(j-1\right)/2\right)$ for $i\le j$;
• if ${\mathbf{uplo}}=\text{'L'}$, the lower triangle of $A$ must be stored with element ${A}_{ij}$ in ${\mathbf{ap}}\left(i+\left(2n-j\right)\left(j-1\right)/2\right)$ for $i\ge j$.

None.

### Output Parameters

1:     $\mathrm{ap}\left(:\right)$ – complex array
The dimension of the array ap will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}×\left({\mathbf{n}}+1\right)/2\right)$
$A$ stores details of the block diagonal matrix $D$ and the multipliers used to obtain the factor $U$ or $L$ as specified by uplo.
2:     $\mathrm{ipiv}\left({\mathbf{n}}\right)$int64int32nag_int array
Details of the interchanges and the block structure of $D$. More precisely,
• if ${\mathbf{ipiv}}\left(i\right)=k>0$, ${d}_{ii}$ is a $1$ by $1$ pivot block and the $i$th row and column of $A$ were interchanged with the $k$th row and column;
• if ${\mathbf{uplo}}=\text{'U'}$ and ${\mathbf{ipiv}}\left(i-1\right)={\mathbf{ipiv}}\left(i\right)=-l<0$, $\left(\begin{array}{cc}{d}_{i-1,i-1}& {\stackrel{-}{d}}_{i,i-1}\\ {\stackrel{-}{d}}_{i,i-1}& {d}_{ii}\end{array}\right)$ is a $2$ by $2$ pivot block and the $\left(i-1\right)$th row and column of $A$ were interchanged with the $l$th row and column;
• if ${\mathbf{uplo}}=\text{'L'}$ and ${\mathbf{ipiv}}\left(i\right)={\mathbf{ipiv}}\left(i+1\right)=-m<0$, $\left(\begin{array}{cc}{d}_{ii}& {d}_{i+1,i}\\ {d}_{i+1,i}& {d}_{i+1,i+1}\end{array}\right)$ is a $2$ by $2$ pivot block and the $\left(i+1\right)$th row and column of $A$ were interchanged with the $m$th row and column.
3:     $\mathrm{info}$int64int32nag_int scalar
${\mathbf{info}}=0$ unless the function detects an error (see Error Indicators and Warnings).

## Error Indicators and Warnings

Cases prefixed with W are classified as warnings and do not generate an error of type NAG:error_n. See nag_issue_warnings.

${\mathbf{info}}<0$
If ${\mathbf{info}}=-i$, argument $i$ had an illegal value. An explanatory message is output, and execution of the program is terminated.
W  ${\mathbf{info}}>0$
Element $_$ of the diagonal is exactly zero. The factorization has been completed, but the block diagonal matrix $D$ is exactly singular, and division by zero will occur if it is used to solve a system of equations.

## Accuracy

If ${\mathbf{uplo}}=\text{'U'}$, the computed factors $U$ and $D$ are the exact factors of a perturbed matrix $A+E$, where
 $E≤cnεPUDUTPT ,$
$c\left(n\right)$ is a modest linear function of $n$, and $\epsilon$ is the machine precision.
If ${\mathbf{uplo}}=\text{'L'}$, a similar statement holds for the computed factors $L$ and $D$.

The elements of $D$ overwrite the corresponding elements of $A$; if $D$ has $2$ by $2$ blocks, only the upper or lower triangle is stored, as specified by uplo.
The unit diagonal elements of $U$ or $L$ and the $2$ by $2$ unit diagonal blocks are not stored. The remaining elements of $U$ or $L$ overwrite elements in the corresponding columns of $A$, but additional row interchanges must be applied to recover $U$ or $L$ explicitly (this is seldom necessary). If ${\mathbf{ipiv}}\left(\mathit{i}\right)=\mathit{i}$, for $\mathit{i}=1,2,\dots ,n$, then $U$ or $L$ are stored explicitly in packed form (except for their unit diagonal elements which are equal to $1$).
The total number of real floating-point operations is approximately $\frac{4}{3}{n}^{3}$.
A call to nag_lapack_zsptrf (f07qr) may be followed by calls to the functions:
The real analogue of this function is nag_lapack_dsptrf (f07pd).

## Example

This example computes the Bunch–Kaufman factorization of the matrix $A$, where
 $A= -0.39-0.71i 5.14-0.64i -7.86-2.96i 3.80+0.92i 5.14-0.64i 8.86+1.81i -3.52+0.58i 5.32-1.59i -7.86-2.96i -3.52+0.58i -2.83-0.03i -1.54-2.86i 3.80+0.92i 5.32-1.59i -1.54-2.86i -0.56+0.12i ,$
using packed storage.
function f07qr_example

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

% complex symmetric matrix, upper triangle stored in packed format
uplo = 'U';
n    = int64(4);
ap = [-0.56 + 0.12i;
-1.54 - 2.86i; -2.83 - 0.03i;
5.32 - 1.59i; -3.52 + 0.58i;  8.86 + 1.81i;
3.80 + 0.92i; -7.86 - 2.96i;  5.14 - 0.64i; -0.39 - 0.71i];

[apf, ipiv, info] = f07qr( ...
uplo, n, ap);

[ifail] = x04dc( ...
uplo, 'Non-unit', n, apf, 'Details of factorization');

fprintf('\nPivot indices\n   ');
fprintf('%11d', ipiv);
fprintf('\n');

f07qr example results

Details of factorization
1          2          3          4
1     -2.0954    -0.1071    -0.4823     0.4426
-2.2011    -0.3157     0.0150     0.1936

2                 4.4079    -0.6078     0.5279
5.3991     0.2811    -0.3715

3                           -2.8300    -7.8600
-0.0300    -2.9600

4                                      -0.3900
-0.7100

Pivot indices
1          2         -2         -2

Chapter Contents
Chapter Introduction
NAG Toolbox

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