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$X$ of a real symmetric positive definite matrix A$A$, nag_matop_real_symm_posdef_inv_noref (f01ad) first computes a Cholesky factorization of A$A$ as A = LLT$A=L{L}^{\mathrm{T}}$, where L$L$ is lower triangular. It then computes L1${L}^{-1}$ and finally forms X$X$ as the product LTL1${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:     a(lda, : $:$) – double array
The first dimension of the array a must be at least n + 1${\mathbf{n}}+1$
The second dimension of the array must be at least max (1,n)$\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$
The upper triangle of the n$n$ by n$n$ positive definite symmetric matrix A$A$. The elements of the array below the diagonal need not be set.

### Optional Input Parameters

1:     n – int64int32nag_int scalar
Default: The second dimension of the array a.
n$n$, the order of the matrix A$A$.
Constraint: n0${\mathbf{n}}\ge 0$.

lda

### Output Parameters

1:     a(lda, : $:$) – double array
The first dimension of the array a will be n + 1${\mathbf{n}}+1$
The second dimension of the array will be max (1,n)$\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$
ldan + 1$\mathit{lda}\ge {\mathbf{n}}+1$.
The lower triangle of the inverse matrix X$X$ is stored in the elements of the array below the diagonal, in rows 2$2$ to n + 1$n+1$; xij${x}_{ij}$ is stored in a(i + 1,j)${\mathbf{a}}\left(i+1,j\right)$ for ij$i\ge j$. The upper triangle of the original matrix is unchanged.
2:     ifail – int64int32nag_int scalar
${\mathrm{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:
ifail = 1${\mathbf{ifail}}=1$
The matrix A$A$ is not positive definite, possibly due to rounding errors.
ifail = 2${\mathbf{ifail}}=2$
 On entry, n < 0${\mathbf{n}}<0$, or lda < n + 1$\mathit{lda}<{\mathbf{n}}+1$.

## 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 n3${n}^{3}$. nag_matop_real_symm_posdef_inv_noref (f01ad) calls functions nag_lapack_dpotrf (f07fd) and nag_lapack_dpotri (f07fj) from LAPACK.

## Example

```function nag_matop_real_symm_posdef_inv_noref_example
a = [5, 7, 6, 5;
7, 10, 8, 7;
6, 8, 10, 9;
5, 7, 9, 10;
0, 0, 0, 0];
[aOut, ifail] = nag_matop_real_symm_posdef_inv_noref(a)
```
```

aOut =

5.0000    7.0000    6.0000    5.0000
68.0000   10.0000    8.0000    7.0000
-41.0000   25.0000   10.0000    9.0000
-17.0000   10.0000    5.0000   10.0000
10.0000   -6.0000   -3.0000    2.0000

ifail =

0

```
```function f01ad_example
a = [5, 7, 6, 5;
7, 10, 8, 7;
6, 8, 10, 9;
5, 7, 9, 10;
0, 0, 0, 0];
```
```

aOut =

5.0000    7.0000    6.0000    5.0000
68.0000   10.0000    8.0000    7.0000
-41.0000   25.0000   10.0000    9.0000
-17.0000   10.0000    5.0000   10.0000
10.0000   -6.0000   -3.0000    2.0000

ifail =

0

```