f07 Chapter Contents
f07 Chapter Introduction
NAG C Library Manual

# NAG Library Function Documentnag_dptrfs (f07jhc)

## 1  Purpose

nag_dptrfs (f07jhc) computes error bounds and refines the solution to a real system of linear equations $AX=B$, where $A$ is an $n$ by $n$ symmetric positive definite tridiagonal matrix and $X$ and $B$ are $n$ by $r$ matrices, using the modified Cholesky factorization returned by nag_dpttrf (f07jdc) and an initial solution returned by nag_dpttrs (f07jec). Iterative refinement is used to reduce the backward error as much as possible.

## 2  Specification

 #include #include
 void nag_dptrfs (Nag_OrderType order, Integer n, Integer nrhs, const double d[], const double e[], const double df[], const double ef[], const double b[], Integer pdb, double x[], Integer pdx, double ferr[], double berr[], NagError *fail)

## 3  Description

nag_dptrfs (f07jhc) should normally be preceded by calls to nag_dpttrf (f07jdc) and nag_dpttrs (f07jec). nag_dpttrf (f07jdc) computes a modified Cholesky factorization of the matrix $A$ as
 $A=LDLT ,$
where $L$ is a unit lower bidiagonal matrix and $D$ is a diagonal matrix, with positive diagonal elements. nag_dpttrs (f07jec) then utilizes the factorization to compute a solution, $\stackrel{^}{X}$, to the required equations. Letting $\stackrel{^}{x}$ denote a column of $\stackrel{^}{X}$, nag_dptrfs (f07jhc) computes a component-wise backward error, $\beta$, the smallest relative perturbation in each element of $A$ and $b$ such that $\stackrel{^}{x}$ is the exact solution of a perturbed system
 $A+E x^ = b + f , with eij ≤ β aij , and fj ≤ β bj .$
The function also estimates a bound for the component-wise forward error in the computed solution defined by $\mathrm{max}\left|{x}_{i}-\stackrel{^}{{x}_{i}}\right|/\mathrm{max}\left|\stackrel{^}{{x}_{i}}\right|$, where $x$ is the corresponding column of the exact solution, $X$.
Note that the modified Cholesky factorization of $A$ can also be expressed as
 $A=UTDU ,$
where $U$ is unit upper bidiagonal.

## 4  References

Anderson E, Bai Z, Bischof C, Blackford S, Demmel J, Dongarra J J, Du Croz J J, Greenbaum A, Hammarling S, McKenney A and Sorensen D (1999) LAPACK Users' Guide (3rd Edition) SIAM, Philadelphia http://www.netlib.org/lapack/lug

## 5  Arguments

1:     orderNag_OrderTypeInput
On entry: the order argument specifies the two-dimensional storage scheme being used, i.e., row-major ordering or column-major ordering. C language defined storage is specified by ${\mathbf{order}}=\mathrm{Nag_RowMajor}$. See Section 3.2.1.3 in the Essential Introduction for a more detailed explanation of the use of this argument.
Constraint: ${\mathbf{order}}=\mathrm{Nag_RowMajor}$ or Nag_ColMajor.
2:     nIntegerInput
On entry: $n$, the order of the matrix $A$.
Constraint: ${\mathbf{n}}\ge 0$.
3:     nrhsIntegerInput
On entry: $r$, the number of right-hand sides, i.e., the number of columns of the matrix $B$.
Constraint: ${\mathbf{nrhs}}\ge 0$.
4:     d[$\mathit{dim}$]const doubleInput
Note: the dimension, dim, of the array d must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
On entry: must contain the $n$ diagonal elements of the matrix of $A$.
5:     e[$\mathit{dim}$]const doubleInput
Note: the dimension, dim, of the array e must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}-1\right)$.
On entry: must contain the $\left(n-1\right)$ subdiagonal elements of the matrix $A$.
6:     df[$\mathit{dim}$]const doubleInput
Note: the dimension, dim, of the array df must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
On entry: must contain the $n$ diagonal elements of the diagonal matrix $D$ from the $LD{L}^{\mathrm{T}}$ factorization of $A$.
7:     ef[$\mathit{dim}$]const doubleInput
Note: the dimension, dim, of the array ef must be at least $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
On entry: must contain the $\left(n-1\right)$ subdiagonal elements of the unit bidiagonal matrix $L$ from the $LD{L}^{\mathrm{T}}$ factorization of $A$.
8:     b[$\mathit{dim}$]const doubleInput
Note: the dimension, dim, of the array b must be at least
• $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{pdb}}×{\mathbf{nrhs}}\right)$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}×{\mathbf{pdb}}\right)$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
The $\left(i,j\right)$th element of the matrix $B$ is stored in
• ${\mathbf{b}}\left[\left(j-1\right)×{\mathbf{pdb}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{b}}\left[\left(i-1\right)×{\mathbf{pdb}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On entry: the $n$ by $r$ matrix of right-hand sides $B$.
9:     pdbIntegerInput
On entry: the stride separating row or column elements (depending on the value of order) in the array b.
Constraints:
• if ${\mathbf{order}}=\mathrm{Nag_ColMajor}$, ${\mathbf{pdb}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$;
• if ${\mathbf{order}}=\mathrm{Nag_RowMajor}$, ${\mathbf{pdb}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{nrhs}}\right)$.
10:   x[$\mathit{dim}$]doubleInput/Output
Note: the dimension, dim, of the array x must be at least
• $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{pdx}}×{\mathbf{nrhs}}\right)$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}×{\mathbf{pdx}}\right)$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
The $\left(i,j\right)$th element of the matrix $X$ is stored in
• ${\mathbf{x}}\left[\left(j-1\right)×{\mathbf{pdx}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{x}}\left[\left(i-1\right)×{\mathbf{pdx}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On entry: the $n$ by $r$ initial solution matrix $X$.
On exit: the $n$ by $r$ refined solution matrix $X$.
11:   pdxIntegerInput
On entry: the stride separating row or column elements (depending on the value of order) in the array x.
Constraints:
• if ${\mathbf{order}}=\mathrm{Nag_ColMajor}$, ${\mathbf{pdx}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$;
• if ${\mathbf{order}}=\mathrm{Nag_RowMajor}$, ${\mathbf{pdx}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{nrhs}}\right)$.
12:   ferr[nrhs]doubleOutput
On exit: estimate of the forward error bound for each computed solution vector, such that ${‖{\stackrel{^}{x}}_{j}-{x}_{j}‖}_{\infty }/{‖{\stackrel{^}{x}}_{j}‖}_{\infty }\le {\mathbf{ferr}}\left[j-1\right]$, where ${\stackrel{^}{x}}_{j}$ is the $j$th column of the computed solution returned in the array x and ${x}_{j}$ is the corresponding column of the exact solution $X$. The estimate is almost always a slight overestimate of the true error.
13:   berr[nrhs]doubleOutput
On exit: estimate of the component-wise relative backward error of each computed solution vector ${\stackrel{^}{x}}_{j}$ (i.e., the smallest relative change in any element of $A$ or $B$ that makes ${\stackrel{^}{x}}_{j}$ an exact solution).
14:   failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
On entry, argument $〈\mathit{\text{value}}〉$ had an illegal value.
NE_INT
On entry, ${\mathbf{n}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{n}}\ge 0$.
On entry, ${\mathbf{nrhs}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{nrhs}}\ge 0$.
On entry, ${\mathbf{pdb}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{pdb}}>0$.
On entry, ${\mathbf{pdx}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{pdx}}>0$.
NE_INT_2
On entry, ${\mathbf{pdb}}=〈\mathit{\text{value}}〉$ and ${\mathbf{n}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{pdb}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
On entry, ${\mathbf{pdb}}=〈\mathit{\text{value}}〉$ and ${\mathbf{nrhs}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{pdb}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{nrhs}}\right)$.
On entry, ${\mathbf{pdx}}=〈\mathit{\text{value}}〉$ and ${\mathbf{n}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{pdx}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{n}}\right)$.
On entry, ${\mathbf{pdx}}=〈\mathit{\text{value}}〉$ and ${\mathbf{nrhs}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{pdx}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(1,{\mathbf{nrhs}}\right)$.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.

## 7  Accuracy

The computed solution for a single right-hand side, $\stackrel{^}{x}$, satisfies an equation of the form
 $A+E x^=b ,$
where
 $E∞=OεA∞$
and $\epsilon$ is the machine precision. An approximate error bound for the computed solution is given by
 $x^ - x ∞ x∞ ≤ κA E∞ A∞ ,$
where $\kappa \left(A\right)={‖{A}^{-1}‖}_{\infty }{‖A‖}_{\infty }$, the condition number of $A$ with respect to the solution of the linear equations. See Section 4.4 of Anderson et al. (1999) for further details.
Function nag_dptcon (f07jgc) can be used to compute the condition number of $A$.

The total number of floating point operations required to solve the equations $AX=B$ is proportional to $nr$. At most five steps of iterative refinement are performed, but usually only one or two steps are required.
The complex analogue of this function is nag_zptrfs (f07jvc).

## 9  Example

This example solves the equations
 $AX=B ,$
where $A$ is the symmetric positive definite tridiagonal matrix
 $A = 4.0 -2.0 0 0 0 -2.0 10.0 -6.0 0 0 0 -6.0 29.0 15.0 0 0 0 15.0 25.0 8.0 0 0 0 8.0 5.0 and B = 6.0 10.0 9.0 4.0 2.0 9.0 14.0 65.0 7.0 23.0 .$
Estimates for the backward errors and forward errors are also output.

### 9.1  Program Text

Program Text (f07jhce.c)

### 9.2  Program Data

Program Data (f07jhce.d)

### 9.3  Program Results

Program Results (f07jhce.r)