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

## Purpose

nag_matop_real_symm_posdef_inv_noref (f01ad) calculates the approximate inverse of a real symmetric positive definite matrix, using a Cholesky factorization.

## Syntax

[a, ifail] = f01ad(a, 'n', n)
[a, ifail] = nag_matop_real_symm_posdef_inv_noref(a, 'n', n)

## Description

To compute the inverse $X$ of a real symmetric positive definite matrix $A$, nag_matop_real_symm_posdef_inv_noref (f01ad) first computes a Cholesky factorization of $A$ as $A=L{L}^{\mathrm{T}}$, where $L$ is lower triangular. It then computes ${L}^{-1}$ and finally forms $X$ as the product ${L}^{-\mathrm{T}}{L}^{-1}$.

## References

Wilkinson J H and Reinsch C (1971) Handbook for Automatic Computation II, Linear Algebra Springer–Verlag

## Parameters

### Compulsory Input Parameters

1:     $\mathrm{a}\left(\mathit{lda},:\right)$ – double array
The first dimension of the array a must be at least ${\mathbf{n}}+1$.
The second dimension of the array a must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
The upper triangle of the $n$ by $n$ positive definite symmetric matrix $A$. The elements of the array below the diagonal need not be set.

### Optional Input Parameters

1:     $\mathrm{n}$int64int32nag_int scalar
Default: the second dimension of the array a.
$n$, the order 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 ${\mathbf{n}}+1$.
The second dimension of the array a will be $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
The lower triangle of the inverse matrix $X$ is stored in the elements of the array below the diagonal, in rows $2$ to $n+1$; ${x}_{ij}$ is stored in ${\mathbf{a}}\left(i+1,j\right)$ for $i\ge j$. The upper triangle of the original matrix is unchanged.
2:     $\mathrm{ifail}$int64int32nag_int scalar
${\mathbf{ifail}}={\mathbf{0}}$ unless the function detects an error (see Error Indicators and Warnings).

## Error Indicators and Warnings

Errors or warnings detected by the function:
${\mathbf{ifail}}=1$
The matrix $A$ is not positive definite, possibly due to rounding errors.
${\mathbf{ifail}}=2$
 On entry, ${\mathbf{n}}<0$, or $\mathit{lda}<{\mathbf{n}}+1$.
${\mathbf{ifail}}=-99$
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.

## Accuracy

The accuracy of the computed inverse depends on the conditioning of the original matrix. For a detailed error analysis see page 39 of Wilkinson and Reinsch (1971).

The time taken by nag_matop_real_symm_posdef_inv_noref (f01ad) is approximately proportional to ${n}^{3}$. nag_matop_real_symm_posdef_inv_noref (f01ad) calls functions nag_lapack_dpotrf (f07fd) and nag_lapack_dpotri (f07fj) from LAPACK.

## Example

This example finds the inverse of the $4$ by $4$ matrix:
 $5 7 6 5 7 10 8 7 6 8 10 9 5 7 9 10 .$
```function f01ad_example

a = [  5,  7,  6,  5;
7, 10,  8,  7;
6,  8, 10,  9;
5,  7,  9, 10];

a = [a; 0 0 0 0];

L = X(2:end,:);
matrix = 'Lower';
diag   = 'Non-unit';
xtitl  = 'Lower triangle of inverse:';
[ifail] = x04ca( ...
matrix, diag, L, xtitl);

```
```f01ad example results

Lower triangle of inverse:
1          2          3          4
1     68.0000
2    -41.0000    25.0000
3    -17.0000    10.0000     5.0000
4     10.0000    -6.0000    -3.0000     2.0000
```