PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_lapack_dgtrfs (f07ch)
Purpose
nag_lapack_dgtrfs (f07ch) computes error bounds and refines the solution to a real system of linear equations
or
, where
is an
by
tridiagonal matrix and
and
are
by
matrices, using the
factorization returned by
nag_lapack_dgttrf (f07cd) and an initial solution returned by
nag_lapack_dgttrs (f07ce). Iterative refinement is used to reduce the backward error as much as possible.
Syntax
[
x,
ferr,
berr,
info] = f07ch(
trans,
dl,
d,
du,
dlf,
df,
duf,
du2,
ipiv,
b,
x, 'n',
n, 'nrhs_p',
nrhs_p)
[
x,
ferr,
berr,
info] = nag_lapack_dgtrfs(
trans,
dl,
d,
du,
dlf,
df,
duf,
du2,
ipiv,
b,
x, 'n',
n, 'nrhs_p',
nrhs_p)
Description
nag_lapack_dgtrfs (f07ch) should normally be preceded by calls to
nag_lapack_dgttrf (f07cd) and
nag_lapack_dgttrs (f07ce).
nag_lapack_dgttrf (f07cd) uses Gaussian elimination with partial pivoting and row interchanges to factorize the matrix
as
where
is a permutation matrix,
is unit lower triangular with at most one nonzero subdiagonal element in each column, and
is an upper triangular band matrix, with two superdiagonals.
nag_lapack_dgttrs (f07ce) then utilizes the factorization to compute a solution,
, to the required equations. Letting
denote a column of
,
nag_lapack_dgtrfs (f07ch) computes a
component-wise backward error,
, the smallest relative perturbation in each element of
and
such that
is the exact solution of a perturbed system
The function also estimates a bound for the component-wise forward error in the computed solution defined by , where is the corresponding column of the exact solution, .
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
Parameters
Compulsory Input Parameters
- 1:
– string (length ≥ 1)
-
Specifies the equations to be solved as follows:
- Solve for .
- or
- Solve for .
Constraint:
, or .
- 2:
– double array
-
The dimension of the array
dl
must be at least
Must contain the subdiagonal elements of the matrix .
- 3:
– double array
-
The dimension of the array
d
must be at least
Must contain the diagonal elements of the matrix .
- 4:
– double array
-
The dimension of the array
du
must be at least
Must contain the superdiagonal elements of the matrix .
- 5:
– double array
-
The dimension of the array
dlf
must be at least
Must contain the multipliers that define the matrix of the factorization of .
- 6:
– double array
-
The dimension of the array
df
must be at least
Must contain the diagonal elements of the upper triangular matrix from the factorization of .
- 7:
– double array
-
The dimension of the array
duf
must be at least
Must contain the elements of the first superdiagonal of .
- 8:
– double array
-
The dimension of the array
du2
must be at least
Must contain the elements of the second superdiagonal of .
- 9:
– int64int32nag_int array
-
The dimension of the array
ipiv
must be at least
Must contain the pivot indices that define the permutation matrix . At the th step, row of the matrix was interchanged with row , and must always be either or , indicating that a row interchange was not performed.
- 10:
– double array
-
The first dimension of the array
b must be at least
.
The second dimension of the array
b must be at least
.
The by matrix of right-hand sides .
- 11:
– double array
-
The first dimension of the array
x must be at least
.
The second dimension of the array
x must be at least
.
The by initial solution matrix .
Optional Input Parameters
- 1:
– int64int32nag_int scalar
-
Default:
the first dimension of the arrays
b,
x and the dimension of the arrays
d,
df,
ipiv.
, the order of the matrix .
Constraint:
.
- 2:
– int64int32nag_int scalar
-
Default:
the second dimension of the arrays
b,
x.
, the number of right-hand sides, i.e., the number of columns of the matrix .
Constraint:
.
Output Parameters
- 1:
– double array
-
The first dimension of the array
x will be
.
The second dimension of the array
x will be
.
The by refined solution matrix .
- 2:
– double array
-
Estimate of the forward error bound for each computed solution vector, such that
, where
is the
th column of the computed solution returned in the array
x and
is the corresponding column of the exact solution
. The estimate is almost always a slight overestimate of the true error.
- 3:
– double array
-
Estimate of the component-wise relative backward error of each computed solution vector (i.e., the smallest relative change in any element of or that makes an exact solution).
- 4:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
-
If , argument had an illegal value. An explanatory message is output, and execution of the program is terminated.
Accuracy
The computed solution for a single right-hand side,
, satisfies an equation of the form
where
and
is the
machine precision. An approximate error bound for the computed solution is given by
where
, the condition number of
with respect to the solution of the linear equations. See Section 4.4 of
Anderson et al. (1999) for further details.
Function
nag_lapack_dgtcon (f07cg) can be used to estimate the condition number of
.
Further Comments
The total number of floating-point operations required to solve the equations or is proportional to . 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_lapack_zgtrfs (f07cv).
Example
This example solves the equations
where
is the tridiagonal matrix
Estimates for the backward errors and forward errors are also output.
Open in the MATLAB editor:
f07ch_example
function f07ch_example
fprintf('f07ch example results\n\n');
du = [ 2.1 -1.0 1.9 8.0];
d = [3.0 2.3 -5.0 -0.9 7.1];
dl = [3.4 3.6 7.0 -6.0 ];
n = numel(d);
[dlf, df, duf, du2f, ipiv, info] = ...
f07cd(dl, d, du);
b = [ 2.7 6.6;
-0.5 10.8;
2.6 -3.2;
0.6 -11.2;
2.7 19.1];
trans = 'No transpose';
[x, info] = f07ce( ...
trans, dlf, df, duf, du2f, ipiv, b);
[x, ferr, berr, info] = ...
f07ch( ...
trans, dl, d, du, dlf, df, duf, du2f, ipiv, b, x);
disp('Solution:');
disp(x);
fprintf('Forward error bounds = %10.1e %10.1e\n',ferr);
fprintf('Backward error bounds = %10.1e %10.1e\n',berr);
f07ch example results
Solution:
-4.0000 5.0000
7.0000 -4.0000
3.0000 -3.0000
-4.0000 -2.0000
-3.0000 1.0000
Forward error bounds = 9.4e-15 1.4e-14
Backward error bounds = 7.2e-17 5.9e-17
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015